Mercurial > emacs
annotate src/xterm.c @ 27294:b62412c9ab2a
(set_internal): New arg BUF.
(Fset): Pass new arg to set_internal.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Tue, 11 Jan 2000 22:18:09 +0000 |
parents | 900a02429efa |
children | c8b20597f0fd |
rev | line source |
---|---|
286 | 1 /* X Communication module for terminals which understand the X protocol. |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2 Copyright (C) 1989, 93, 94, 95, 96, 1997, 1998, 1999 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3 Free Software Foundation, Inc. |
286 | 4 |
5 This file is part of GNU Emacs. | |
6 | |
7 GNU Emacs is free software; you can redistribute it and/or modify | |
8 it under the terms of the GNU General Public License as published by | |
621 | 9 the Free Software Foundation; either version 2, or (at your option) |
286 | 10 any later version. |
11 | |
12 GNU Emacs is distributed in the hope that it will be useful, | |
13 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 GNU General Public License for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
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:
14165
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:
14165
diff
changeset
|
20 Boston, MA 02111-1307, USA. */ |
286 | 21 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
22 /* New display code by Gerd Moellmann <gerd@gnu.org>. */ |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
23 /* Xt features made by Fred Pierresteguy. */ |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
24 |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25921
diff
changeset
|
25 #include <config.h> |
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25921
diff
changeset
|
26 |
2977
ddcad1457cd5
Move signal.h and stdio.h before config.h.
Richard M. Stallman <rms@gnu.org>
parents:
2958
diff
changeset
|
27 /* On 4.3 these lose if they come after xterm.h. */ |
ddcad1457cd5
Move signal.h and stdio.h before config.h.
Richard M. Stallman <rms@gnu.org>
parents:
2958
diff
changeset
|
28 /* Putting these at the beginning seems to be standard for other .c files. */ |
ddcad1457cd5
Move signal.h and stdio.h before config.h.
Richard M. Stallman <rms@gnu.org>
parents:
2958
diff
changeset
|
29 #include <signal.h> |
ddcad1457cd5
Move signal.h and stdio.h before config.h.
Richard M. Stallman <rms@gnu.org>
parents:
2958
diff
changeset
|
30 |
7902
22b9aaaf0302
Put stdio.h after config.h.
Richard M. Stallman <rms@gnu.org>
parents:
7870
diff
changeset
|
31 #include <stdio.h> |
22b9aaaf0302
Put stdio.h after config.h.
Richard M. Stallman <rms@gnu.org>
parents:
7870
diff
changeset
|
32 |
286 | 33 #ifdef HAVE_X_WINDOWS |
34 | |
35 #include "lisp.h" | |
2439
b6c62e4abf59
Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents:
2353
diff
changeset
|
36 #include "blockinput.h" |
286 | 37 |
21933
58f3be08e692
Include syssignal.h after lisp.h.
Andreas Schwab <schwab@suse.de>
parents:
21903
diff
changeset
|
38 /* Need syssignal.h for various externs and definitions that may be required |
58f3be08e692
Include syssignal.h after lisp.h.
Andreas Schwab <schwab@suse.de>
parents:
21903
diff
changeset
|
39 by some configurations for calls to signal later in this source file. */ |
58f3be08e692
Include syssignal.h after lisp.h.
Andreas Schwab <schwab@suse.de>
parents:
21903
diff
changeset
|
40 #include "syssignal.h" |
58f3be08e692
Include syssignal.h after lisp.h.
Andreas Schwab <schwab@suse.de>
parents:
21903
diff
changeset
|
41 |
286 | 42 /* This may include sys/types.h, and that somehow loses |
43 if this is not done before the other system files. */ | |
44 #include "xterm.h" | |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
45 #include <X11/cursorfont.h> |
286 | 46 |
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
47 #ifndef USG |
286 | 48 /* Load sys/types.h if not already loaded. |
49 In some systems loading it twice is suicidal. */ | |
50 #ifndef makedev | |
51 #include <sys/types.h> | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
52 #endif /* makedev */ |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
53 #endif /* USG */ |
286 | 54 |
16220
02044b05d8e0
Replaced symbol BSD with BSD_SYSTEM.
Karl Heuer <kwzh@gnu.org>
parents:
16209
diff
changeset
|
55 #ifdef BSD_SYSTEM |
286 | 56 #include <sys/ioctl.h> |
16220
02044b05d8e0
Replaced symbol BSD with BSD_SYSTEM.
Karl Heuer <kwzh@gnu.org>
parents:
16209
diff
changeset
|
57 #endif /* ! defined (BSD_SYSTEM) */ |
286 | 58 |
3355
e0c2e8a2ef75
(XTread_socket, case KeyPress) [HPUX]: Test IsModifiedKey.
Richard M. Stallman <rms@gnu.org>
parents:
3284
diff
changeset
|
59 #include "systty.h" |
555 | 60 #include "systime.h" |
286 | 61 |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
62 #ifndef INCLUDED_FCNTL |
286 | 63 #include <fcntl.h> |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
64 #endif |
286 | 65 #include <ctype.h> |
66 #include <errno.h> | |
67 #include <setjmp.h> | |
68 #include <sys/stat.h> | |
10366 | 69 /* Caused redefinition of DBL_DIG on Netbsd; seems not to be needed. */ |
70 /* #include <sys/param.h> */ | |
286 | 71 |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
72 #include "charset.h" |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
73 #include "ccl.h" |
23515
1e52542fb338
Include frame.h before fontset.h.
Kenichi Handa <handa@m17n.org>
parents:
23162
diff
changeset
|
74 #include "frame.h" |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
75 #include "fontset.h" |
286 | 76 #include "dispextern.h" |
77 #include "termhooks.h" | |
78 #include "termopts.h" | |
79 #include "termchar.h" | |
80 #if 0 | |
81 #include "sink.h" | |
82 #include "sinkmask.h" | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
83 #endif /* ! 0 */ |
286 | 84 #include "gnu.h" |
85 #include "disptab.h" | |
86 #include "buffer.h" | |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
87 #include "window.h" |
8652 | 88 #include "keyboard.h" |
8848 | 89 #include "intervals.h" |
21514 | 90 #include "process.h" |
286 | 91 |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
92 #ifdef USE_X_TOOLKIT |
15117
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
93 #include <X11/Shell.h> |
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
94 #endif |
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
95 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
96 #include <sys/types.h> |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
97 #ifdef HAVE_SYS_TIME_H |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
98 #include <sys/time.h> |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
99 #endif |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
100 #ifdef HAVE_UNISTD_H |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
101 #include <unistd.h> |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
102 #endif |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
103 |
15117
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
104 #ifdef USE_X_TOOLKIT |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
105 |
5898
105c99071e9b
(x_destroy_window) [USE_X_TOOLKIT]: Call free_frame_menubar.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5872
diff
changeset
|
106 extern void free_frame_menubar (); |
13507
9a9f459075af
(HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents:
13363
diff
changeset
|
107 extern FRAME_PTR x_menubar_window_to_frame (); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
108 |
13507
9a9f459075af
(HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents:
13363
diff
changeset
|
109 #if (XtSpecificationRelease >= 5) && !defined(NO_EDITRES) |
9a9f459075af
(HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents:
13363
diff
changeset
|
110 #define HACK_EDITRES |
6941
a914781ef58a
(Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents:
6934
diff
changeset
|
111 extern void _XEditResCheckMessages (); |
13507
9a9f459075af
(HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents:
13363
diff
changeset
|
112 #endif /* not NO_EDITRES */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
113 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
114 /* Include toolkit specific headers for the scroll bar widget. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
115 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
116 #ifdef USE_TOOLKIT_SCROLL_BARS |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
117 #if defined USE_MOTIF |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
118 #include <Xm/Xm.h> /* for LESSTIF_VERSION */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
119 #include <Xm/ScrollBar.h> |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
120 #include <Xm/ScrollBarP.h> |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
121 #else /* !USE_MOTIF i.e. use Xaw */ |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
122 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
123 #ifdef HAVE_XAW3D |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
124 #include <X11/Xaw3d/Simple.h> |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
125 #include <X11/Xaw3d/Scrollbar.h> |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
126 #define ARROW_SCROLLBAR |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
127 #include <X11/Xaw3d/ScrollbarP.h> |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
128 #else /* !HAVE_XAW3D */ |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
129 #include <X11/Xaw/Simple.h> |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
130 #include <X11/Xaw/Scrollbar.h> |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
131 #endif /* !HAVE_XAW3D */ |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
132 #ifndef XtNpickTop |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
133 #define XtNpickTop "pickTop" |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
134 #endif /* !XtNpickTop */ |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
135 #endif /* !USE_MOTIF */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
136 #endif /* USE_TOOLKIT_SCROLL_BARS */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
137 |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
138 #endif /* USE_X_TOOLKIT */ |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
139 |
6022
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
140 #ifndef USE_X_TOOLKIT |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
141 #define x_any_window_to_frame x_window_to_frame |
6983
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
142 #define x_top_window_to_frame x_window_to_frame |
6022
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
143 #endif |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
144 |
7602
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
145 #ifdef USE_X_TOOLKIT |
12189 | 146 #include "widget.h" |
7602
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
147 #ifndef XtNinitialState |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
148 #define XtNinitialState "initialState" |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
149 #endif |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
150 #endif |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
151 |
14305
3cc44eaf9ebf
(x_connection_signal): Explicitly check the thread interlock
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
152 #ifdef SOLARIS2 |
15292 | 153 /* memmove will be defined as a macro in Xfuncs.h unless |
154 <string.h> is included beforehand. The declaration for memmove in | |
155 <string.h> will cause a syntax error when Xfuncs.h later includes it. */ | |
156 #include <string.h> | |
157 #endif | |
158 | |
14522
9cee3e7c6468
(min, max): Don't define if already defined.
Richard M. Stallman <rms@gnu.org>
parents:
14489
diff
changeset
|
159 #ifndef min |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
160 #define min(a,b) ((a) < (b) ? (a) : (b)) |
14522
9cee3e7c6468
(min, max): Don't define if already defined.
Richard M. Stallman <rms@gnu.org>
parents:
14489
diff
changeset
|
161 #endif |
9cee3e7c6468
(min, max): Don't define if already defined.
Richard M. Stallman <rms@gnu.org>
parents:
14489
diff
changeset
|
162 #ifndef max |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
163 #define max(a,b) ((a) > (b) ? (a) : (b)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
164 #endif |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
165 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
166 #define abs(x) ((x) < 0 ? -(x) : (x)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
167 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
168 #define BETWEEN(X, LOWER, UPPER) ((X) >= (LOWER) && (X) < (UPPER)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
169 |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
170 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
171 /* Bitmaps for truncated lines. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
172 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
173 enum bitmap_type |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
174 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
175 NO_BITMAP, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
176 LEFT_TRUNCATION_BITMAP, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
177 RIGHT_TRUNCATION_BITMAP, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
178 OVERLAY_ARROW_BITMAP, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
179 CONTINUED_LINE_BITMAP, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
180 CONTINUATION_LINE_BITMAP, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
181 ZV_LINE_BITMAP |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
182 }; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
183 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
184 /* Bitmap drawn to indicate lines not displaying text if |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
185 `indicate-empty-lines' is non-nil. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
186 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
187 #define zv_width 8 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
188 #define zv_height 8 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
189 static unsigned char zv_bits[] = { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
190 0x00, 0x00, 0x1e, 0x1e, 0x1e, 0x1e, 0x00, 0x00}; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
191 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
192 /* An arrow like this: `<-'. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
193 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
194 #define left_width 8 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
195 #define left_height 8 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
196 static unsigned char left_bits[] = { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
197 0x18, 0x0c, 0x06, 0x3f, 0x3f, 0x06, 0x0c, 0x18}; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
198 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
199 /* Right truncation arrow bitmap `->'. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
200 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
201 #define right_width 8 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
202 #define right_height 8 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
203 static unsigned char right_bits[] = { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
204 0x18, 0x30, 0x60, 0xfc, 0xfc, 0x60, 0x30, 0x18}; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
205 |
25465 | 206 /* Marker for continued lines. */ |
207 | |
208 #define continued_width 8 | |
209 #define continued_height 8 | |
210 static unsigned char continued_bits[] = { | |
211 0x3c, 0x7c, 0xc0, 0xe4, 0xfc, 0x7c, 0x3c, 0x7c}; | |
212 | |
213 /* Marker for continuation lines. */ | |
214 | |
215 #define continuation_width 8 | |
216 #define continuation_height 8 | |
217 static unsigned char continuation_bits[] = { | |
218 0x3c, 0x3e, 0x03, 0x27, 0x3f, 0x3e, 0x3c, 0x3e}; | |
219 | |
220 /* Overlay arrow bitmap. */ | |
221 | |
222 #if 0 | |
223 /* A bomb. */ | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
224 #define ov_width 8 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
225 #define ov_height 8 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
226 static unsigned char ov_bits[] = { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
227 0x30, 0x08, 0x3c, 0x7e, 0x7a, 0x7a, 0x62, 0x3c}; |
25465 | 228 #else |
229 /* A triangular arrow. */ | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
230 #define ov_width 8 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
231 #define ov_height 8 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
232 static unsigned char ov_bits[] = { |
25465 | 233 0x03, 0x0f, 0x1f, 0x3f, 0x3f, 0x1f, 0x0f, 0x03}; |
234 | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
235 #endif |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
236 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
237 extern Lisp_Object Qhelp_echo; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
238 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
239 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
240 /* Non-zero means Emacs uses toolkit scroll bars. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
241 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
242 int x_toolkit_scroll_bars_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
243 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
244 /* If a string, XTread_socket generates an event to display that string. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
245 (The display is done in read_char.) */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
246 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
247 static Lisp_Object help_echo; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
248 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
249 /* Temporary variable for XTread_socket. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
250 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
251 static Lisp_Object previous_help_echo; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
252 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
253 /* Non-zero means that a HELP_EVENT has been generated since Emacs |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
254 start. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
255 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
256 static int any_help_event_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
257 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
258 /* Non-zero means draw block and hollow cursor as wide as the glyph |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
259 under it. For example, if a block cursor is over a tab, it will be |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
260 drawn as wide as that tab on the display. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
261 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
262 int x_stretch_cursor_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
263 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
264 /* This is a chain of structures for all the X displays currently in |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
265 use. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
266 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
267 struct x_display_info *x_display_list; |
286 | 268 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
269 /* This is a list of cons cells, each of the form (NAME |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
270 . FONT-LIST-CACHE), one for each element of x_display_list and in |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
271 the same order. NAME is the name of the frame. FONT-LIST-CACHE |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
272 records previous values returned by x-list-fonts. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
273 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
274 Lisp_Object x_display_name_list; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
275 |
2474
86c8a6e08fd4
Fix typo in comment delimiter.
Richard M. Stallman <rms@gnu.org>
parents:
2468
diff
changeset
|
276 /* Frame being updated by update_frame. This is declared in term.c. |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
277 This is set by update_begin and looked at by all the XT functions. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
278 It is zero while not inside an update. In that case, the XT |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
279 functions assume that `selected_frame' is the frame to apply to. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
280 |
2468
35aa32e1a003
* xterm.c (updating_frame): Declare this extern instead of static,
Jim Blandy <jimb@redhat.com>
parents:
2439
diff
changeset
|
281 extern struct frame *updating_frame; |
771 | 282 |
21514 | 283 extern int waiting_for_input; |
15507
3fe1a322fbf5
(x_connection_closed): If waiting_for_input, call quit_throw_to_read_char.
Richard M. Stallman <rms@gnu.org>
parents:
15472
diff
changeset
|
284 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
285 /* This is a frame waiting to be auto-raised, within XTread_socket. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
286 |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
287 struct frame *pending_autoraise_frame; |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
288 |
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
289 #ifdef USE_X_TOOLKIT |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
290 /* The application context for Xt use. */ |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
291 XtAppContext Xt_app_con; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
292 static String Xt_default_resources[] = {0}; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
293 #endif /* USE_X_TOOLKIT */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
294 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
295 /* Nominal cursor position -- where to draw output. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
296 HPOS and VPOS are window relative glyph matrix coordinates. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
297 X and Y are window relative pixel coordinates. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
298 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
299 struct cursor_pos output_cursor; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
300 |
286 | 301 |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
302 /* Mouse movement. |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
303 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
304 Formerly, we used PointerMotionHintMask (in standard_event_mask) |
15042
c99dd01d9334
(note_mouse_movement): Don't call XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
14963
diff
changeset
|
305 so that we would have to call XQueryPointer after each MotionNotify |
c99dd01d9334
(note_mouse_movement): Don't call XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
14963
diff
changeset
|
306 event to ask for another such event. However, this made mouse tracking |
c99dd01d9334
(note_mouse_movement): Don't call XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
14963
diff
changeset
|
307 slow, and there was a bug that made it eventually stop. |
c99dd01d9334
(note_mouse_movement): Don't call XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
14963
diff
changeset
|
308 |
c99dd01d9334
(note_mouse_movement): Don't call XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
14963
diff
changeset
|
309 Simply asking for MotionNotify all the time seems to work better. |
c99dd01d9334
(note_mouse_movement): Don't call XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
14963
diff
changeset
|
310 |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
311 In order to avoid asking for motion events and then throwing most |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
312 of them away or busy-polling the server for mouse positions, we ask |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
313 the server for pointer motion hints. This means that we get only |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
314 one event per group of mouse movements. "Groups" are delimited by |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
315 other kinds of events (focus changes and button clicks, for |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
316 example), or by XQueryPointer calls; when one of these happens, we |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
317 get another MotionNotify event the next time the mouse moves. This |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
318 is at least as efficient as getting motion events when mouse |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
319 tracking is on, and I suspect only negligibly worse when tracking |
15042
c99dd01d9334
(note_mouse_movement): Don't call XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
14963
diff
changeset
|
320 is off. */ |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
321 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
322 /* Where the mouse was last time we reported a mouse event. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
323 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
324 FRAME_PTR last_mouse_frame; |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
325 static XRectangle last_mouse_glyph; |
15803
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
326 static Lisp_Object last_mouse_press_frame; |
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
327 |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
328 /* The scroll bar in which the last X motion event occurred. |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
329 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
330 If the last X motion event occurred in a scroll bar, we set this so |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
331 XTmouse_position can know whether to report a scroll bar motion or |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
332 an ordinary motion. |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
333 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
334 If the last X motion event didn't occur in a scroll bar, we set |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
335 this to Qnil, to tell XTmouse_position to return an ordinary motion |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
336 event. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
337 |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
338 static Lisp_Object last_mouse_scroll_bar; |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
339 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
340 /* This is a hack. We would really prefer that XTmouse_position would |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
341 return the time associated with the position it returns, but there |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
342 doesn't seem to be any way to wrest the time-stamp from the server |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
343 along with the position query. So, we just keep track of the time |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
344 of the last movement we received, and return that in hopes that |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
345 it's somewhat accurate. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
346 |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
347 static Time last_mouse_movement_time; |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
348 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
349 /* Incremented by XTread_socket whenever it really tries to read |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
350 events. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
351 |
9337
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
352 #ifdef __STDC__ |
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
353 static int volatile input_signal_count; |
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
354 #else |
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
355 static int input_signal_count; |
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
356 #endif |
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
357 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
358 /* Used locally within XTread_socket. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
359 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
360 static int x_noop_count; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
361 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
362 /* Initial values of argv and argc. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
363 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
364 extern char **initial_argv; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
365 extern int initial_argc; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
366 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
367 extern Lisp_Object Vcommand_line_args, Vsystem_name; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
368 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
369 /* Tells if a window manager is present or not. */ |
286 | 370 |
371 extern Lisp_Object Vx_no_window_manager; | |
372 | |
6941
a914781ef58a
(Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents:
6934
diff
changeset
|
373 extern Lisp_Object Qface, Qmouse_face; |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
374 |
286 | 375 extern int errno; |
376 | |
2661
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
377 /* A mask of extra modifier bits to put into every keyboard char. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
378 |
1841
338e4ffdb54b
(XTread_socket): Support extra_keyboard_modifiers.
Richard M. Stallman <rms@gnu.org>
parents:
1821
diff
changeset
|
379 extern int extra_keyboard_modifiers; |
338e4ffdb54b
(XTread_socket): Support extra_keyboard_modifiers.
Richard M. Stallman <rms@gnu.org>
parents:
1821
diff
changeset
|
380 |
11807
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
381 static Lisp_Object Qvendor_specific_keysyms; |
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
382 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
383 extern XrmDatabase x_load_resources (); |
11915
e2ab839155e1
(XTflash): Use pointers as args to select.
Karl Heuer <kwzh@gnu.org>
parents:
11904
diff
changeset
|
384 extern Lisp_Object x_icon_type (); |
e2ab839155e1
(XTflash): Use pointers as args to select.
Karl Heuer <kwzh@gnu.org>
parents:
11904
diff
changeset
|
385 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
386 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
387 /* Enumeration for overriding/changing the face to use for drawing |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
388 glyphs in x_draw_glyphs. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
389 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
390 enum draw_glyphs_face |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
391 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
392 DRAW_NORMAL_TEXT, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
393 DRAW_INVERSE_VIDEO, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
394 DRAW_CURSOR, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
395 DRAW_MOUSE_FACE, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
396 DRAW_IMAGE_RAISED, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
397 DRAW_IMAGE_SUNKEN |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
398 }; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
399 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
400 static void x_update_window_end P_ ((struct window *, int)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
401 static void frame_to_window_pixel_xy P_ ((struct window *, int *, int *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
402 void x_delete_display P_ ((struct x_display_info *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
403 static unsigned int x_x_to_emacs_modifiers P_ ((struct x_display_info *, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
404 unsigned)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
405 static int fast_find_position P_ ((struct window *, int, int *, int *, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
406 int *, int *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
407 static void set_output_cursor P_ ((struct cursor_pos *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
408 static struct glyph *x_y_to_hpos_vpos P_ ((struct window *, int, int, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
409 int *, int *, int *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
410 static void note_mode_line_highlight P_ ((struct window *, int, int)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
411 static void x_check_font P_ ((struct frame *, XFontStruct *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
412 static void note_mouse_highlight P_ ((struct frame *, int, int)); |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
413 static void note_tool_bar_highlight P_ ((struct frame *f, int, int)); |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
414 static void x_handle_tool_bar_click P_ ((struct frame *, XButtonEvent *)); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
415 static void show_mouse_face P_ ((struct x_display_info *, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
416 enum draw_glyphs_face)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
417 static int x_io_error_quitter P_ ((Display *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
418 int x_catch_errors P_ ((Display *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
419 void x_uncatch_errors P_ ((Display *, int)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
420 void x_lower_frame P_ ((struct frame *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
421 void x_scroll_bar_clear P_ ((struct frame *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
422 int x_had_errors_p P_ ((Display *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
423 void x_wm_set_size_hint P_ ((struct frame *, long, int)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
424 void x_raise_frame P_ ((struct frame *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
425 void x_set_window_size P_ ((struct frame *, int, int, int)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
426 void x_wm_set_window_state P_ ((struct frame *, int)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
427 void x_wm_set_icon_pixmap P_ ((struct frame *, int)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
428 void x_initialize P_ ((void)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
429 static void x_font_min_bounds P_ ((XFontStruct *, int *, int *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
430 static int x_compute_min_glyph_bounds P_ ((struct frame *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
431 static void x_draw_phys_cursor_glyph P_ ((struct window *, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
432 struct glyph_row *, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
433 enum draw_glyphs_face)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
434 static void x_update_end P_ ((struct frame *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
435 static void XTframe_up_to_date P_ ((struct frame *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
436 static void XTreassert_line_highlight P_ ((int, int)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
437 static void x_change_line_highlight P_ ((int, int, int, int)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
438 static void XTset_terminal_modes P_ ((void)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
439 static void XTreset_terminal_modes P_ ((void)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
440 static void XTcursor_to P_ ((int, int, int, int)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
441 static void x_write_glyphs P_ ((struct glyph *, int)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
442 static void x_clear_end_of_line P_ ((int)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
443 static void x_clear_frame P_ ((void)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
444 static void x_clear_cursor P_ ((struct window *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
445 static void frame_highlight P_ ((struct frame *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
446 static void frame_unhighlight P_ ((struct frame *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
447 static void x_new_focus_frame P_ ((struct x_display_info *, struct frame *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
448 static void XTframe_rehighlight P_ ((struct frame *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
449 static void x_frame_rehighlight P_ ((struct x_display_info *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
450 static void x_draw_hollow_cursor P_ ((struct window *, struct glyph_row *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
451 static void x_draw_bar_cursor P_ ((struct window *, struct glyph_row *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
452 static int x_intersect_rectangles P_ ((XRectangle *, XRectangle *, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
453 XRectangle *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
454 static void expose_frame P_ ((struct frame *, int, int, int, int)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
455 static void expose_window_tree P_ ((struct window *, XRectangle *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
456 static void expose_window P_ ((struct window *, XRectangle *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
457 static void expose_area P_ ((struct window *, struct glyph_row *, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
458 XRectangle *, enum glyph_row_area)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
459 static void expose_line P_ ((struct window *, struct glyph_row *, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
460 XRectangle *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
461 static void x_update_cursor_in_window_tree P_ ((struct window *, int)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
462 static void x_update_window_cursor P_ ((struct window *, int)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
463 static void x_erase_phys_cursor P_ ((struct window *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
464 void x_display_and_set_cursor P_ ((struct window *, int, int, int, int, int)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
465 static void x_draw_bitmap P_ ((struct window *, struct glyph_row *, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
466 enum bitmap_type)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
467 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
468 static void x_clip_to_row P_ ((struct window *, struct glyph_row *, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
469 GC, int)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
470 static int x_phys_cursor_in_rect_p P_ ((struct window *, XRectangle *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
471 static void x_draw_row_bitmaps P_ ((struct window *, struct glyph_row *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
472 static void note_overwritten_text_cursor P_ ((struct window *, int, int)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
473 static void x_flush P_ ((struct frame *f)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
474 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
475 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
476 /* Flush display of frame F, or of all frames if F is null. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
477 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
478 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
479 x_flush (f) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
480 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
481 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
482 BLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
483 if (f == NULL) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
484 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
485 Lisp_Object rest, frame; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
486 FOR_EACH_FRAME (rest, frame) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
487 x_flush (XFRAME (frame)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
488 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
489 else if (FRAME_X_P (f)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
490 XFlush (FRAME_X_DISPLAY (f)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
491 UNBLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
492 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
493 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
494 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
495 /* Remove calls to XFlush by defining XFlush to an empty replacement. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
496 Calls to XFlush should be unnecessary because the X output buffer |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
497 is flushed automatically as needed by calls to XPending, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
498 XNextEvent, or XWindowEvent according to the XFlush man page. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
499 XTread_socket calls XPending. Removing XFlush improves |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
500 performance. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
501 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
502 #define XFlush(DISPLAY) (void) 0 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
503 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
504 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
505 /*********************************************************************** |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
506 Debugging |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
507 ***********************************************************************/ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
508 |
12192
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
509 #if 0 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
510 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
511 /* This is a function useful for recording debugging information about |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
512 the sequence of occurrences in this file. */ |
12192
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
513 |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
514 struct record |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
515 { |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
516 char *locus; |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
517 int type; |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
518 }; |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
519 |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
520 struct record event_record[100]; |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
521 |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
522 int event_record_index; |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
523 |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
524 record_event (locus, type) |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
525 char *locus; |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
526 int type; |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
527 { |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
528 if (event_record_index == sizeof (event_record) / sizeof (struct record)) |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
529 event_record_index = 0; |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
530 |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
531 event_record[event_record_index].locus = locus; |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
532 event_record[event_record_index].type = type; |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
533 event_record_index++; |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
534 } |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
535 |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
536 #endif /* 0 */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
537 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
538 |
12192
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
539 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
540 /* Return the struct x_display_info corresponding to DPY. */ |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
541 |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
542 struct x_display_info * |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
543 x_display_info_for_display (dpy) |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
544 Display *dpy; |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
545 { |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
546 struct x_display_info *dpyinfo; |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
547 |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
548 for (dpyinfo = x_display_list; dpyinfo; dpyinfo = dpyinfo->next) |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
549 if (dpyinfo->display == dpy) |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
550 return dpyinfo; |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
551 |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
552 return 0; |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
553 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
554 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
555 |
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
556 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
557 /*********************************************************************** |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
558 Starting and ending an update |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
559 ***********************************************************************/ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
560 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
561 /* Start an update of frame F. This function is installed as a hook |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
562 for update_begin, i.e. it is called when update_begin is called. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
563 This function is called prior to calls to x_update_window_begin for |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
564 each window being updated. Currently, there is nothing to do here |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
565 because all interesting stuff is done on a window basis. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
566 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
567 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
568 x_update_begin (f) |
771 | 569 struct frame *f; |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
570 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
571 /* Nothing to do. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
572 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
573 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
574 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
575 /* Start update of window W. Set the global variable updated_window |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
576 to the window being updated and set output_cursor to the cursor |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
577 position of W. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
578 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
579 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
580 x_update_window_begin (w) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
581 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
582 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
583 struct frame *f = XFRAME (WINDOW_FRAME (w)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
584 struct x_display_info *display_info = FRAME_X_DISPLAY_INFO (f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
585 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
586 updated_window = w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
587 set_output_cursor (&w->cursor); |
286 | 588 |
589 BLOCK_INPUT; | |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
590 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
591 if (f == display_info->mouse_face_mouse_frame) |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
592 { |
6660
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
593 /* Don't do highlighting for mouse motion during the update. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
594 display_info->mouse_face_defer = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
595 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
596 /* If F needs to be redrawn, simply forget about any prior mouse |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
597 highlighting. */ |
10274
83aaf59dabbe
(XTupdate_begin): Fix backward test in previous change.
Richard M. Stallman <rms@gnu.org>
parents:
10223
diff
changeset
|
598 if (FRAME_GARBAGED_P (f)) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
599 display_info->mouse_face_window = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
600 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
601 /* Can we tell that this update does not affect the window |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
602 where the mouse highlight is? If so, no need to turn off. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
603 Likewise, don't do anything if the frame is garbaged; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
604 in that case, the frame's current matrix that we would use |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
605 is all wrong, and we will redisplay that line anyway. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
606 if (!NILP (display_info->mouse_face_window) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
607 && w == XWINDOW (display_info->mouse_face_window)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
608 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
609 int i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
610 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
611 for (i = 0; i < w->desired_matrix->nrows; ++i) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
612 if (MATRIX_ROW_ENABLED_P (w->desired_matrix, i)) |
6660
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
613 break; |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
614 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
615 if (i < w->desired_matrix->nrows) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
616 clear_mouse_face (display_info); |
6660
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
617 } |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
618 } |
8781
98741404d3e0
Delete X11 conditionals.
Richard M. Stallman <rms@gnu.org>
parents:
8724
diff
changeset
|
619 |
286 | 620 UNBLOCK_INPUT; |
621 } | |
622 | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
623 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
624 /* Draw a vertical window border to the right of window W if W doesn't |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
625 have vertical scroll bars. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
626 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
627 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
628 x_draw_vertical_border (w) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
629 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
630 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
631 struct frame *f = XFRAME (WINDOW_FRAME (w)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
632 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
633 /* Redraw borders between horizontally adjacent windows. Don't |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
634 do it for frames with vertical scroll bars because either the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
635 right scroll bar of a window, or the left scroll bar of its |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
636 neighbor will suffice as a border. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
637 if (!WINDOW_RIGHTMOST_P (w) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
638 && !FRAME_HAS_VERTICAL_SCROLL_BARS (f)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
639 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
640 int x0, x1, y0, y1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
641 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
642 window_box_edges (w, -1, &x0, &y0, &x1, &y1); |
25465 | 643 x1 += FRAME_X_RIGHT_FLAGS_AREA_WIDTH (f); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
644 y1 -= 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
645 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
646 XDrawLine (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
647 f->output_data.x->normal_gc, x1, y0, x1, y1); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
648 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
649 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
650 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
651 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
652 /* End update of window W (which is equal to updated_window). Draw |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
653 vertical borders between horizontally adjacent windows, and display |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
654 W's cursor if CURSOR_ON_P is non-zero. W may be a menu bar |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
655 pseudo-window in case we don't have X toolkit support. Such |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
656 windows don't have a cursor, so don't display it here. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
657 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
658 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
659 x_update_window_end (w, cursor_on_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
660 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
661 int cursor_on_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
662 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
663 if (!w->pseudo_window_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
664 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
665 BLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
666 if (cursor_on_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
667 x_display_and_set_cursor (w, 1, output_cursor.hpos, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
668 output_cursor.vpos, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
669 output_cursor.x, output_cursor.y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
670 x_draw_vertical_border (w); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
671 UNBLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
672 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
673 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
674 updated_window = NULL; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
675 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
676 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
677 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
678 /* End update of frame F. This function is installed as a hook in |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
679 update_end. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
680 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
681 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
682 x_update_end (f) |
771 | 683 struct frame *f; |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
684 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
685 /* Mouse highlight may be displayed again. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
686 FRAME_X_DISPLAY_INFO (f)->mouse_face_defer = 0; |
286 | 687 |
688 BLOCK_INPUT; | |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
689 XFlush (FRAME_X_DISPLAY (f)); |
286 | 690 UNBLOCK_INPUT; |
691 } | |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
692 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
693 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
694 /* This function is called from various places in xdisp.c whenever a |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
695 complete update has been performed. The global variable |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
696 updated_window is not available here. */ |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
697 |
21514 | 698 static void |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
699 XTframe_up_to_date (f) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
700 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
701 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
702 if (FRAME_X_P (f)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
703 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
704 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
705 if (dpyinfo->mouse_face_deferred_gc |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
706 || f == dpyinfo->mouse_face_mouse_frame) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
707 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
708 BLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
709 if (dpyinfo->mouse_face_mouse_frame) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
710 note_mouse_highlight (dpyinfo->mouse_face_mouse_frame, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
711 dpyinfo->mouse_face_mouse_x, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
712 dpyinfo->mouse_face_mouse_y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
713 dpyinfo->mouse_face_deferred_gc = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
714 UNBLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
715 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
716 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
717 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
718 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
719 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
720 /* Draw truncation mark bitmaps, continuation mark bitmaps, overlay |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
721 arrow bitmaps, or clear the areas where they would be displayed |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
722 before DESIRED_ROW is made current. The window being updated is |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
723 found in updated_window. This function It is called from |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
724 update_window_line only if it is known that there are differences |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
725 between bitmaps to be drawn between current row and DESIRED_ROW. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
726 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
727 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
728 x_after_update_window_line (desired_row) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
729 struct glyph_row *desired_row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
730 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
731 struct window *w = updated_window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
732 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
733 xassert (w); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
734 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
735 if (!desired_row->mode_line_p && !w->pseudo_window_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
736 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
737 BLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
738 x_draw_row_bitmaps (w, desired_row); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
739 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
740 /* When a window has disappeared, make sure that no rest of |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
741 full-width rows stays visible in the internal border. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
742 if (windows_or_buffers_changed) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
743 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
744 struct frame *f = XFRAME (w->frame); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
745 int width = FRAME_INTERNAL_BORDER_WIDTH (f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
746 int height = desired_row->visible_height; |
25465 | 747 int x = (window_box_right (w, -1) |
748 + FRAME_X_RIGHT_FLAGS_AREA_WIDTH (f)); | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
749 int y = WINDOW_TO_FRAME_PIXEL_Y (w, max (0, desired_row->y)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
750 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
751 XClearArea (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
752 x, y, width, height, False); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
753 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
754 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
755 UNBLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
756 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
757 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
758 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
759 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
760 /* Draw the bitmap WHICH in one of the areas to the left or right of |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
761 window W. ROW is the glyph row for which to display the bitmap; it |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
762 determines the vertical position at which the bitmap has to be |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
763 drawn. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
764 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
765 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
766 x_draw_bitmap (w, row, which) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
767 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
768 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
769 enum bitmap_type which; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
770 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
771 struct frame *f = XFRAME (WINDOW_FRAME (w)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
772 Display *display = FRAME_X_DISPLAY (f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
773 Window window = FRAME_X_WINDOW (f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
774 int x, y, wd, h, dy; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
775 unsigned char *bits; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
776 Pixmap pixmap; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
777 GC gc = f->output_data.x->normal_gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
778 struct face *face; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
779 int depth = DefaultDepthOfScreen (FRAME_X_SCREEN (f)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
780 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
781 /* Must clip because of partially visible lines. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
782 x_clip_to_row (w, row, gc, 1); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
783 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
784 switch (which) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
785 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
786 case LEFT_TRUNCATION_BITMAP: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
787 wd = left_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
788 h = left_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
789 bits = left_bits; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
790 x = (WINDOW_TO_FRAME_PIXEL_X (w, 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
791 - wd |
25465 | 792 - (FRAME_X_LEFT_FLAGS_AREA_WIDTH (f) - wd) / 2); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
793 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
794 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
795 case OVERLAY_ARROW_BITMAP: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
796 wd = left_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
797 h = left_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
798 bits = ov_bits; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
799 x = (WINDOW_TO_FRAME_PIXEL_X (w, 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
800 - wd |
25465 | 801 - (FRAME_X_LEFT_FLAGS_AREA_WIDTH (f) - wd) / 2); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
802 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
803 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
804 case RIGHT_TRUNCATION_BITMAP: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
805 wd = right_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
806 h = right_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
807 bits = right_bits; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
808 x = window_box_right (w, -1); |
25465 | 809 x += (FRAME_X_RIGHT_FLAGS_AREA_WIDTH (f) - wd) / 2; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
810 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
811 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
812 case CONTINUED_LINE_BITMAP: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
813 wd = right_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
814 h = right_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
815 bits = continued_bits; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
816 x = window_box_right (w, -1); |
25465 | 817 x += (FRAME_X_RIGHT_FLAGS_AREA_WIDTH (f) - wd) / 2; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
818 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
819 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
820 case CONTINUATION_LINE_BITMAP: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
821 wd = continuation_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
822 h = continuation_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
823 bits = continuation_bits; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
824 x = (WINDOW_TO_FRAME_PIXEL_X (w, 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
825 - wd |
25465 | 826 - (FRAME_X_LEFT_FLAGS_AREA_WIDTH (f) - wd) / 2); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
827 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
828 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
829 case ZV_LINE_BITMAP: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
830 wd = zv_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
831 h = zv_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
832 bits = zv_bits; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
833 x = (WINDOW_TO_FRAME_PIXEL_X (w, 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
834 - wd |
25465 | 835 - (FRAME_X_LEFT_FLAGS_AREA_WIDTH (f) - wd) / 2); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
836 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
837 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
838 default: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
839 abort (); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
840 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
841 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
842 /* Convert to frame coordinates. Set dy to the offset in the row to |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
843 start drawing the bitmap. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
844 y = WINDOW_TO_FRAME_PIXEL_Y (w, row->y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
845 dy = (row->height - h) / 2; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
846 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
847 /* Draw the bitmap. I believe these small pixmaps can be cached |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
848 by the server. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
849 face = FACE_FROM_ID (f, BITMAP_AREA_FACE_ID); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
850 pixmap = XCreatePixmapFromBitmapData (display, window, bits, wd, h, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
851 face->foreground, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
852 face->background, depth); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
853 XCopyArea (display, pixmap, window, gc, 0, 0, wd, h, x, y + dy); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
854 XFreePixmap (display, pixmap); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
855 XSetClipMask (display, gc, None); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
856 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
857 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
858 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
859 /* Draw flags bitmaps for glyph row ROW on window W. Call this |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
860 function with input blocked. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
861 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
862 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
863 x_draw_row_bitmaps (w, row) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
864 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
865 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
866 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
867 struct frame *f = XFRAME (w->frame); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
868 enum bitmap_type bitmap; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
869 struct face *face; |
25546 | 870 int header_line_height = -1; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
871 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
872 xassert (interrupt_input_blocked); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
873 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
874 /* If row is completely invisible, because of vscrolling, we |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
875 don't have to draw anything. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
876 if (row->visible_height <= 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
877 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
878 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
879 face = FACE_FROM_ID (f, BITMAP_AREA_FACE_ID); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
880 PREPARE_FACE_FOR_DISPLAY (f, face); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
881 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
882 /* Decide which bitmap to draw at the left side. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
883 if (row->overlay_arrow_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
884 bitmap = OVERLAY_ARROW_BITMAP; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
885 else if (row->truncated_on_left_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
886 bitmap = LEFT_TRUNCATION_BITMAP; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
887 else if (MATRIX_ROW_CONTINUATION_LINE_P (row)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
888 bitmap = CONTINUATION_LINE_BITMAP; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
889 else if (row->indicate_empty_line_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
890 bitmap = ZV_LINE_BITMAP; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
891 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
892 bitmap = NO_BITMAP; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
893 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
894 /* Clear flags area if no bitmap to draw or if bitmap doesn't fill |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
895 the flags area. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
896 if (bitmap == NO_BITMAP |
25465 | 897 || FRAME_FLAGS_BITMAP_WIDTH (f) < FRAME_X_LEFT_FLAGS_AREA_WIDTH (f) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
898 || row->height > FRAME_FLAGS_BITMAP_HEIGHT (f)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
899 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
900 /* If W has a vertical border to its left, don't draw over it. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
901 int border = ((XFASTINT (w->left) > 0 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
902 && !FRAME_HAS_VERTICAL_SCROLL_BARS (f)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
903 ? 1 : 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
904 int left = window_box_left (w, -1); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
905 |
25546 | 906 if (header_line_height < 0) |
907 header_line_height = WINDOW_DISPLAY_HEADER_LINE_HEIGHT (w); | |
25091
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
908 |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
909 /* In case the same realized face is used for bitmap areas and |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
910 for something displayed in the text (e.g. face `region' on |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
911 mono-displays, the fill style may have been changed to |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
912 FillSolid in x_draw_glyph_string_background. */ |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
913 if (face->stipple) |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
914 XSetFillStyle (FRAME_X_DISPLAY (f), face->gc, FillOpaqueStippled); |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
915 else |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
916 XSetForeground (FRAME_X_DISPLAY (f), face->gc, face->background); |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
917 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
918 XFillRectangle (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
919 face->gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
920 (left |
25465 | 921 - FRAME_X_LEFT_FLAGS_AREA_WIDTH (f) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
922 + border), |
25546 | 923 WINDOW_TO_FRAME_PIXEL_Y (w, max (header_line_height, |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
924 row->y)), |
25465 | 925 FRAME_X_LEFT_FLAGS_AREA_WIDTH (f) - border, |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
926 row->visible_height); |
25091
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
927 if (!face->stipple) |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
928 XSetForeground (FRAME_X_DISPLAY (f), face->gc, face->foreground); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
929 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
930 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
931 /* Draw the left bitmap. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
932 if (bitmap != NO_BITMAP) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
933 x_draw_bitmap (w, row, bitmap); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
934 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
935 /* Decide which bitmap to draw at the right side. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
936 if (row->truncated_on_right_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
937 bitmap = RIGHT_TRUNCATION_BITMAP; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
938 else if (row->continued_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
939 bitmap = CONTINUED_LINE_BITMAP; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
940 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
941 bitmap = NO_BITMAP; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
942 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
943 /* Clear flags area if no bitmap to draw of if bitmap doesn't fill |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
944 the flags area. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
945 if (bitmap == NO_BITMAP |
25465 | 946 || FRAME_FLAGS_BITMAP_WIDTH (f) < FRAME_X_RIGHT_FLAGS_AREA_WIDTH (f) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
947 || row->height > FRAME_FLAGS_BITMAP_HEIGHT (f)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
948 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
949 int right = window_box_right (w, -1); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
950 |
25546 | 951 if (header_line_height < 0) |
952 header_line_height = WINDOW_DISPLAY_HEADER_LINE_HEIGHT (w); | |
25091
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
953 |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
954 /* In case the same realized face is used for bitmap areas and |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
955 for something displayed in the text (e.g. face `region' on |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
956 mono-displays, the fill style may have been changed to |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
957 FillSolid in x_draw_glyph_string_background. */ |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
958 if (face->stipple) |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
959 XSetFillStyle (FRAME_X_DISPLAY (f), face->gc, FillOpaqueStippled); |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
960 else |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
961 XSetForeground (FRAME_X_DISPLAY (f), face->gc, face->background); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
962 XFillRectangle (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
963 face->gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
964 right, |
25546 | 965 WINDOW_TO_FRAME_PIXEL_Y (w, max (header_line_height, |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
966 row->y)), |
25465 | 967 FRAME_X_RIGHT_FLAGS_AREA_WIDTH (f), |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
968 row->visible_height); |
25091
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
969 if (!face->stipple) |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
970 XSetForeground (FRAME_X_DISPLAY (f), face->gc, face->foreground); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
971 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
972 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
973 /* Draw the right bitmap. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
974 if (bitmap != NO_BITMAP) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
975 x_draw_bitmap (w, row, bitmap); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
976 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
977 |
286 | 978 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
979 /*********************************************************************** |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
980 Line Highlighting |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
981 ***********************************************************************/ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
982 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
983 /* External interface to control of standout mode. Not used for X |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
984 frames. Aborts when called. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
985 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
986 static void |
286 | 987 XTreassert_line_highlight (new, vpos) |
988 int new, vpos; | |
989 { | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
990 abort (); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
991 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
992 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
993 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
994 /* Call this when about to modify line at position VPOS and change |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
995 whether it is highlighted. Not used for X frames. Aborts when |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
996 called. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
997 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
998 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
999 x_change_line_highlight (new_highlight, vpos, y, first_unused_hpos) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1000 int new_highlight, vpos, y, first_unused_hpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1001 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1002 abort (); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1003 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1004 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1005 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1006 /* This is called when starting Emacs and when restarting after |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1007 suspend. When starting Emacs, no X window is mapped. And nothing |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1008 must be done to Emacs's own window if it is suspended (though that |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1009 rarely happens). */ |
286 | 1010 |
21514 | 1011 static void |
286 | 1012 XTset_terminal_modes () |
1013 { | |
1014 } | |
1015 | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1016 /* This is called when exiting or suspending Emacs. Exiting will make |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1017 the X-windows go away, and suspending requires no action. */ |
286 | 1018 |
21514 | 1019 static void |
286 | 1020 XTreset_terminal_modes () |
1021 { | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1022 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1023 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1024 |
286 | 1025 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1026 /*********************************************************************** |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1027 Output Cursor |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1028 ***********************************************************************/ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1029 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1030 /* Set the global variable output_cursor to CURSOR. All cursor |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1031 positions are relative to updated_window. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1032 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1033 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1034 set_output_cursor (cursor) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1035 struct cursor_pos *cursor; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1036 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1037 output_cursor.hpos = cursor->hpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1038 output_cursor.vpos = cursor->vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1039 output_cursor.x = cursor->x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1040 output_cursor.y = cursor->y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1041 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1042 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1043 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1044 /* Set a nominal cursor position. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1045 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1046 HPOS and VPOS are column/row positions in a window glyph matrix. X |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1047 and Y are window text area relative pixel positions. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1048 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1049 If this is done during an update, updated_window will contain the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1050 window that is being updated and the position is the future output |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1051 cursor position for that window. If updated_window is null, use |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1052 selected_window and display the cursor at the given position. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1053 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1054 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1055 XTcursor_to (vpos, hpos, y, x) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1056 int vpos, hpos, y, x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1057 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1058 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1059 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1060 /* If updated_window is not set, work on selected_window. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1061 if (updated_window) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1062 w = updated_window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1063 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1064 w = XWINDOW (selected_window); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1065 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1066 /* Set the output cursor. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1067 output_cursor.hpos = hpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1068 output_cursor.vpos = vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1069 output_cursor.x = x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1070 output_cursor.y = y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1071 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1072 /* If not called as part of an update, really display the cursor. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1073 This will also set the cursor position of W. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1074 if (updated_window == NULL) |
286 | 1075 { |
1076 BLOCK_INPUT; | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1077 x_display_cursor (w, 1, hpos, vpos, x, y); |
25682
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
1078 XFlush (FRAME_X_DISPLAY (SELECTED_FRAME ())); |
286 | 1079 UNBLOCK_INPUT; |
1080 } | |
1081 } | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1082 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1083 |
286 | 1084 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1085 /*********************************************************************** |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1086 Display Iterator |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1087 ***********************************************************************/ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1088 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1089 /* Function prototypes of this page. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1090 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1091 static struct face *x_get_glyph_face_and_encoding P_ ((struct frame *, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1092 struct glyph *, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1093 XChar2b *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1094 static struct face *x_get_char_face_and_encoding P_ ((struct frame *, int, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1095 int, XChar2b *, int)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1096 static XCharStruct *x_per_char_metric P_ ((XFontStruct *, XChar2b *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1097 static void x_encode_char P_ ((int, XChar2b *, struct font_info *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1098 static void x_append_glyph P_ ((struct it *)); |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1099 static void x_append_composite_glyph P_ ((struct it *)); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1100 static void x_append_stretch_glyph P_ ((struct it *it, Lisp_Object, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1101 int, int, double)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1102 static void x_produce_glyphs P_ ((struct it *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1103 static void x_produce_image_glyph P_ ((struct it *it)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1104 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1105 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1106 /* Return a pointer to per-char metric information in FONT of a |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1107 character pointed by B which is a pointer to an XChar2b. */ |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
1108 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
1109 #define PER_CHAR_METRIC(font, b) \ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
1110 ((font)->per_char \ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
1111 ? ((font)->per_char + (b)->byte2 - (font)->min_char_or_byte2 \ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
1112 + (((font)->min_byte1 || (font)->max_byte1) \ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
1113 ? (((b)->byte1 - (font)->min_byte1) \ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
1114 * ((font)->max_char_or_byte2 - (font)->min_char_or_byte2 + 1)) \ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
1115 : 0)) \ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
1116 : &((font)->max_bounds)) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
1117 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1118 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1119 /* Get metrics of character CHAR2B in FONT. Value is always non-null. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1120 If CHAR2B is not contained in FONT, the font's default character |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1121 metric is returned. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1122 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1123 static INLINE XCharStruct * |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1124 x_per_char_metric (font, char2b) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1125 XFontStruct *font; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1126 XChar2b *char2b; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1127 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1128 /* The result metric information. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1129 XCharStruct *pcm = NULL; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1130 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1131 xassert (font && char2b); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1132 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1133 if (font->per_char != NULL) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1134 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1135 if (font->min_byte1 == 0 && font->max_byte1 == 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1136 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1137 /* min_char_or_byte2 specifies the linear character index |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1138 corresponding to the first element of the per_char array, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1139 max_char_or_byte2 is the index of the last character. A |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1140 character with non-zero CHAR2B->byte1 is not in the font. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1141 A character with byte2 less than min_char_or_byte2 or |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1142 greater max_char_or_byte2 is not in the font. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1143 if (char2b->byte1 == 0 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1144 && char2b->byte2 >= font->min_char_or_byte2 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1145 && char2b->byte2 <= font->max_char_or_byte2) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1146 pcm = font->per_char + char2b->byte2 - font->min_char_or_byte2; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1147 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1148 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1149 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1150 /* If either min_byte1 or max_byte1 are nonzero, both |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1151 min_char_or_byte2 and max_char_or_byte2 are less than |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1152 256, and the 2-byte character index values corresponding |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1153 to the per_char array element N (counting from 0) are: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1154 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1155 byte1 = N/D + min_byte1 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1156 byte2 = N\D + min_char_or_byte2 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1157 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1158 where: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1159 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1160 D = max_char_or_byte2 - min_char_or_byte2 + 1 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1161 / = integer division |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1162 \ = integer modulus */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1163 if (char2b->byte1 >= font->min_byte1 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1164 && char2b->byte1 <= font->max_byte1 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1165 && char2b->byte2 >= font->min_char_or_byte2 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1166 && char2b->byte2 <= font->max_char_or_byte2) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1167 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1168 pcm = (font->per_char |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1169 + ((font->max_char_or_byte2 - font->min_char_or_byte2 + 1) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1170 * (char2b->byte1 - font->min_byte1)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1171 + (char2b->byte2 - font->min_char_or_byte2)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1172 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1173 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1174 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1175 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1176 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1177 /* If the per_char pointer is null, all glyphs between the first |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1178 and last character indexes inclusive have the same |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1179 information, as given by both min_bounds and max_bounds. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1180 if (char2b->byte2 >= font->min_char_or_byte2 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1181 && char2b->byte2 <= font->max_char_or_byte2) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1182 pcm = &font->max_bounds; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1183 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1184 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1185 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1186 if (pcm == NULL || pcm->width == 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1187 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1188 /* Character not contained in the font. FONT->default_char |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1189 gives the character that will be printed. FONT->default_char |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1190 is a 16-bit character code with byte1 in the most significant |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1191 byte and byte2 in the least significant byte. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1192 XChar2b default_char; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1193 default_char.byte1 = (font->default_char >> BITS_PER_CHAR) & 0xff; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1194 default_char.byte2 = font->default_char & 0xff; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1195 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1196 /* Avoid an endless recursion if FONT->default_char itself |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1197 hasn't per char metrics. handa@etl.go.jp reports that some |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1198 fonts have this problem. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1199 if (default_char.byte1 != char2b->byte1 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1200 || default_char.byte2 != char2b->byte2) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1201 pcm = x_per_char_metric (font, &default_char); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1202 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1203 pcm = &font->max_bounds; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1204 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1205 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1206 return pcm; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1207 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1208 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1209 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1210 /* Encode CHAR2B using encoding information from FONT_INFO. CHAR2B is |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1211 the two-byte form of C. Encoding is returned in *CHAR2B. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1212 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1213 static INLINE void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1214 x_encode_char (c, char2b, font_info) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1215 int c; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1216 XChar2b *char2b; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1217 struct font_info *font_info; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1218 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1219 int charset = CHAR_CHARSET (c); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1220 XFontStruct *font = font_info->font; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1221 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1222 /* FONT_INFO may define a scheme by which to encode byte1 and byte2. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1223 This may be either a program in a special encoder language or a |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1224 fixed encoding. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1225 if (font_info->font_encoder) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1226 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1227 /* It's a program. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1228 struct ccl_program *ccl = font_info->font_encoder; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1229 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1230 if (CHARSET_DIMENSION (charset) == 1) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1231 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1232 ccl->reg[0] = charset; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1233 ccl->reg[1] = char2b->byte2; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1234 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1235 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1236 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1237 ccl->reg[0] = charset; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1238 ccl->reg[1] = char2b->byte1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1239 ccl->reg[2] = char2b->byte2; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1240 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1241 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1242 ccl_driver (ccl, NULL, NULL, 0, 0, NULL); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1243 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1244 /* We assume that MSBs are appropriately set/reset by CCL |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1245 program. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1246 if (font->max_byte1 == 0) /* 1-byte font */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1247 char2b->byte2 = ccl->reg[1]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1248 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1249 char2b->byte1 = ccl->reg[1], char2b->byte2 = ccl->reg[2]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1250 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1251 else if (font_info->encoding[charset]) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1252 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1253 /* Fixed encoding scheme. See fontset.h for the meaning of the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1254 encoding numbers. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1255 int enc = font_info->encoding[charset]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1256 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1257 if ((enc == 1 || enc == 2) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1258 && CHARSET_DIMENSION (charset) == 2) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1259 char2b->byte1 |= 0x80; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1260 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1261 if (enc == 1 || enc == 3) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1262 char2b->byte2 |= 0x80; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1263 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1264 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1265 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1266 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1267 /* Get face and two-byte form of character C in face FACE_ID on frame |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1268 F. The encoding of C is returned in *CHAR2B. MULTIBYTE_P non-zero |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1269 means we want to display multibyte text. Value is a pointer to a |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1270 realized face that is ready for display. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1271 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1272 static INLINE struct face * |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1273 x_get_char_face_and_encoding (f, c, face_id, char2b, multibyte_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1274 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1275 int c, face_id; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1276 XChar2b *char2b; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1277 int multibyte_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1278 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1279 struct face *face = FACE_FROM_ID (f, face_id); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1280 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1281 if (!multibyte_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1282 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1283 /* Unibyte case. We don't have to encode, but we have to make |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1284 sure to use a face suitable for unibyte. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1285 char2b->byte1 = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1286 char2b->byte2 = c; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1287 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1288 if (!FACE_SUITABLE_FOR_CHARSET_P (face, -1)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1289 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1290 face_id = FACE_FOR_CHARSET (f, face_id, -1); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1291 face = FACE_FROM_ID (f, face_id); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1292 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1293 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1294 else if (c < 128 && face_id < BASIC_FACE_ID_SENTINEL) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1295 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1296 /* Case of ASCII in a face known to fit ASCII. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1297 char2b->byte1 = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1298 char2b->byte2 = c; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1299 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1300 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1301 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1302 int c1, c2, charset; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1303 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1304 /* Split characters into bytes. If c2 is -1 afterwards, C is |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1305 really a one-byte character so that byte1 is zero. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1306 SPLIT_CHAR (c, charset, c1, c2); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1307 if (c2 > 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1308 char2b->byte1 = c1, char2b->byte2 = c2; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1309 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1310 char2b->byte1 = 0, char2b->byte2 = c1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1311 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1312 /* Get the face for displaying C. If `face' is not suitable for |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1313 charset, get the one that fits. (This can happen for the |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1314 translations of a composition where the glyph |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1315 specifies a face for the first component, but the other |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1316 components have a different charset.) */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1317 if (!FACE_SUITABLE_FOR_CHARSET_P (face, charset)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1318 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1319 face_id = FACE_FOR_CHARSET (f, face_id, charset); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1320 face = FACE_FROM_ID (f, face_id); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1321 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1322 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1323 /* Maybe encode the character in *CHAR2B. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1324 if (charset != CHARSET_ASCII) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1325 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1326 struct font_info *font_info |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1327 = FONT_INFO_FROM_ID (f, face->font_info_id); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1328 if (font_info) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1329 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1330 x_encode_char (c, char2b, font_info); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1331 if (charset == charset_latin_iso8859_1) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1332 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1333 xassert (((XFontStruct *) font_info->font)->max_char_or_byte2 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1334 >= 0x80); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1335 char2b->byte2 |= 0x80; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1336 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1337 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1338 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1339 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1340 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1341 /* Make sure X resources of the face are allocated. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1342 xassert (face != NULL); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1343 PREPARE_FACE_FOR_DISPLAY (f, face); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1344 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1345 return face; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1346 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1347 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1348 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1349 /* Get face and two-byte form of character glyph GLYPH on frame F. |
27000
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
1350 The encoding of GLYPH->u.ch is returned in *CHAR2B. Value is |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1351 a pointer to a realized face that is ready for display. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1352 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1353 static INLINE struct face * |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1354 x_get_glyph_face_and_encoding (f, glyph, char2b) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1355 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1356 struct glyph *glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1357 XChar2b *char2b; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1358 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1359 struct face *face; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1360 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1361 xassert (glyph->type == CHAR_GLYPH); |
27000
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
1362 face = FACE_FROM_ID (f, glyph->face_id); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1363 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1364 if (!glyph->multibyte_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1365 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1366 /* Unibyte case. We don't have to encode, but we have to make |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1367 sure to use a face suitable for unibyte. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1368 char2b->byte1 = 0; |
27000
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
1369 char2b->byte2 = glyph->u.ch; |
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
1370 } |
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
1371 else if (glyph->u.ch < 128 |
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
1372 && glyph->face_id < BASIC_FACE_ID_SENTINEL) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1373 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1374 /* Case of ASCII in a face known to fit ASCII. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1375 char2b->byte1 = 0; |
27000
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
1376 char2b->byte2 = glyph->u.ch; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1377 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1378 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1379 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1380 int c1, c2, charset; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1381 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1382 /* Split characters into bytes. If c2 is -1 afterwards, C is |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1383 really a one-byte character so that byte1 is zero. */ |
27000
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
1384 SPLIT_CHAR (glyph->u.ch, charset, c1, c2); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1385 if (c2 > 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1386 char2b->byte1 = c1, char2b->byte2 = c2; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1387 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1388 char2b->byte1 = 0, char2b->byte2 = c1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1389 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1390 /* Maybe encode the character in *CHAR2B. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1391 if (charset != CHARSET_ASCII) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1392 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1393 struct font_info *font_info |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1394 = FONT_INFO_FROM_ID (f, face->font_info_id); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1395 if (font_info) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1396 { |
27000
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
1397 x_encode_char (glyph->u.ch, char2b, font_info); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1398 if (charset == charset_latin_iso8859_1) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1399 char2b->byte2 |= 0x80; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1400 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1401 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1402 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1403 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1404 /* Make sure X resources of the face are allocated. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1405 xassert (face != NULL); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1406 PREPARE_FACE_FOR_DISPLAY (f, face); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1407 return face; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1408 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1409 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1410 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1411 /* Store one glyph for IT->char_to_display in IT->glyph_row. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1412 Called from x_produce_glyphs when IT->glyph_row is non-null. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1413 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1414 static INLINE void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1415 x_append_glyph (it) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1416 struct it *it; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1417 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1418 struct glyph *glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1419 enum glyph_row_area area = it->area; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1420 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1421 xassert (it->glyph_row); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1422 xassert (it->char_to_display != '\n' && it->char_to_display != '\t'); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1423 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1424 glyph = it->glyph_row->glyphs[area] + it->glyph_row->used[area]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1425 if (glyph < it->glyph_row->glyphs[area + 1]) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1426 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1427 /* Play it safe. If sub-structures of the glyph are not all the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1428 same size, it otherwise be that some bits stay set. This |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1429 would prevent a comparison with GLYPH_EQUAL_P. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1430 glyph->u.val = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1431 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1432 glyph->type = CHAR_GLYPH; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1433 glyph->pixel_width = it->pixel_width; |
27000
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
1434 glyph->u.ch = it->char_to_display; |
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
1435 glyph->face_id = it->face_id; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1436 glyph->charpos = CHARPOS (it->position); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1437 glyph->object = it->object; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1438 glyph->left_box_line_p = it->start_of_box_run_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1439 glyph->right_box_line_p = it->end_of_box_run_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1440 glyph->voffset = it->voffset; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1441 glyph->multibyte_p = it->multibyte_p; |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
1442 glyph->overlaps_vertically_p = (it->phys_ascent > it->ascent |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
1443 || it->phys_descent > it->descent); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1444 ++it->glyph_row->used[area]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1445 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1446 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1447 |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1448 /* Store one glyph for the composition IT->cmp_id in IT->glyph_row. |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1449 Called from x_produce_glyphs when IT->glyph_row is non-null. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1450 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1451 static INLINE void |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1452 x_append_composite_glyph (it) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1453 struct it *it; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1454 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1455 struct glyph *glyph; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1456 enum glyph_row_area area = it->area; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1457 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1458 xassert (it->glyph_row); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1459 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1460 glyph = it->glyph_row->glyphs[area] + it->glyph_row->used[area]; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1461 if (glyph < it->glyph_row->glyphs[area + 1]) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1462 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1463 /* Play it safe. If sub-structures of the glyph are not all the |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1464 same size, it otherwise be that some bits stay set. This |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1465 would prevent a comparison with GLYPH_EQUAL_P. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1466 glyph->u.val = 0; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1467 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1468 glyph->type = COMPOSITE_GLYPH; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1469 glyph->pixel_width = it->pixel_width; |
27000
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
1470 glyph->u.cmp_id = it->cmp_id; |
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
1471 glyph->face_id = it->face_id; |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1472 glyph->charpos = CHARPOS (it->position); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1473 glyph->object = it->object; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1474 glyph->left_box_line_p = it->start_of_box_run_p; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1475 glyph->right_box_line_p = it->end_of_box_run_p; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1476 glyph->voffset = it->voffset; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1477 glyph->multibyte_p = it->multibyte_p; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1478 glyph->overlaps_vertically_p = (it->phys_ascent > it->ascent |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1479 || it->phys_descent > it->descent); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1480 ++it->glyph_row->used[area]; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1481 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1482 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1483 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1484 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1485 /* Change IT->ascent and IT->height according to the setting of |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1486 IT->voffset. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1487 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1488 static INLINE void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1489 take_vertical_position_into_account (it) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1490 struct it *it; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1491 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1492 if (it->voffset) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1493 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1494 if (it->voffset < 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1495 /* Increase the ascent so that we can display the text higher |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1496 in the line. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1497 it->ascent += abs (it->voffset); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1498 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1499 /* Increase the descent so that we can display the text lower |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1500 in the line. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1501 it->descent += it->voffset; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1502 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1503 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1504 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1505 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1506 /* Produce glyphs/get display metrics for the image IT is loaded with. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1507 See the description of struct display_iterator in dispextern.h for |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1508 an overview of struct display_iterator. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1509 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1510 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1511 x_produce_image_glyph (it) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1512 struct it *it; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1513 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1514 struct image *img; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1515 struct face *face; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1516 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1517 xassert (it->what == IT_IMAGE); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1518 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1519 face = FACE_FROM_ID (it->f, it->face_id); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1520 img = IMAGE_FROM_ID (it->f, it->image_id); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1521 xassert (img); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1522 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1523 /* Make sure X resources of the face and image are loaded. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1524 PREPARE_FACE_FOR_DISPLAY (it->f, face); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1525 prepare_image_for_display (it->f, img); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1526 |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
1527 it->ascent = it->phys_ascent = IMAGE_ASCENT (img); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
1528 it->descent = it->phys_descent = img->height + 2 * img->margin - it->ascent; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1529 it->pixel_width = img->width + 2 * img->margin; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1530 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1531 it->nglyphs = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1532 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1533 if (face->box != FACE_NO_BOX) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1534 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1535 it->ascent += face->box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1536 it->descent += face->box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1537 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1538 if (it->start_of_box_run_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1539 it->pixel_width += face->box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1540 if (it->end_of_box_run_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1541 it->pixel_width += face->box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1542 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1543 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1544 take_vertical_position_into_account (it); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1545 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1546 if (it->glyph_row) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1547 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1548 struct glyph *glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1549 enum glyph_row_area area = it->area; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1550 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1551 glyph = it->glyph_row->glyphs[area] + it->glyph_row->used[area]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1552 if (glyph < it->glyph_row->glyphs[area + 1]) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1553 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1554 glyph->type = IMAGE_GLYPH; |
27000
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
1555 glyph->u.img_id = img->id; |
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
1556 glyph->face_id = it->face_id; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1557 glyph->pixel_width = it->pixel_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1558 glyph->charpos = CHARPOS (it->position); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1559 glyph->object = it->object; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1560 glyph->left_box_line_p = it->start_of_box_run_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1561 glyph->right_box_line_p = it->end_of_box_run_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1562 glyph->voffset = it->voffset; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1563 glyph->multibyte_p = it->multibyte_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1564 ++it->glyph_row->used[area]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1565 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1566 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1567 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1568 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1569 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1570 /* Append a stretch glyph to IT->glyph_row. OBJECT is the source |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1571 of the glyph, WIDTH and HEIGHT are the width and height of the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1572 stretch. ASCENT is the percentage/100 of HEIGHT to use for the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1573 ascent of the glyph (0 <= ASCENT <= 1). */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1574 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1575 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1576 x_append_stretch_glyph (it, object, width, height, ascent) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1577 struct it *it; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1578 Lisp_Object object; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1579 int width, height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1580 double ascent; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1581 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1582 struct glyph *glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1583 enum glyph_row_area area = it->area; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1584 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1585 xassert (ascent >= 0 && ascent <= 1); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1586 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1587 glyph = it->glyph_row->glyphs[area] + it->glyph_row->used[area]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1588 if (glyph < it->glyph_row->glyphs[area + 1]) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1589 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1590 glyph->type = STRETCH_GLYPH; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1591 glyph->u.stretch.ascent = height * ascent; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1592 glyph->u.stretch.height = height; |
27000
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
1593 glyph->face_id = it->face_id; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1594 glyph->pixel_width = width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1595 glyph->charpos = CHARPOS (it->position); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1596 glyph->object = object; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1597 glyph->left_box_line_p = it->start_of_box_run_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1598 glyph->right_box_line_p = it->end_of_box_run_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1599 glyph->voffset = it->voffset; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1600 glyph->multibyte_p = it->multibyte_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1601 ++it->glyph_row->used[area]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1602 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1603 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1604 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1605 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1606 /* Produce a stretch glyph for iterator IT. IT->object is the value |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1607 of the glyph property displayed. The value must be a list |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1608 `(space KEYWORD VALUE ...)' with the following KEYWORD/VALUE pairs |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1609 being recognized: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1610 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1611 1. `:width WIDTH' specifies that the space should be WIDTH * |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1612 canonical char width wide. WIDTH may be an integer or floating |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1613 point number. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1614 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1615 2. `:relative-width FACTOR' specifies that the width of the stretch |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1616 should be computed from the width of the first character having the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1617 `glyph' property, and should be FACTOR times that width. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1618 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1619 3. `:align-to HPOS' specifies that the space should be wide enough |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1620 to reach HPOS, a value in canonical character units. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1621 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1622 Exactly one of the above pairs must be present. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1623 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1624 4. `:height HEIGHT' specifies that the height of the stretch produced |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1625 should be HEIGHT, measured in canonical character units. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1626 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1627 5. `:relative-height FACTOR' specifies that the height of the the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1628 stretch should be FACTOR times the height of the characters having |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1629 the glyph property. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1630 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1631 Either none or exactly one of 4 or 5 must be present. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1632 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1633 6. `:ascent ASCENT' specifies that ASCENT percent of the height |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1634 of the stretch should be used for the ascent of the stretch. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1635 ASCENT must be in the range 0 <= ASCENT <= 100. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1636 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1637 #define NUMVAL(X) \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1638 ((INTEGERP (X) || FLOATP (X)) \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1639 ? XFLOATINT (X) \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1640 : - 1) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1641 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1642 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1643 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1644 x_produce_stretch_glyph (it) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1645 struct it *it; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1646 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1647 /* (space :width WIDTH :height HEIGHT. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1648 extern Lisp_Object QCwidth, QCheight, QCascent, Qspace; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1649 extern Lisp_Object QCrelative_width, QCrelative_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1650 extern Lisp_Object QCalign_to; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1651 Lisp_Object prop, plist; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1652 double width = 0, height = 0, ascent = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1653 struct face *face = FACE_FROM_ID (it->f, it->face_id); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1654 XFontStruct *font = face->font ? face->font : FRAME_FONT (it->f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1655 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1656 PREPARE_FACE_FOR_DISPLAY (it->f, face); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1657 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1658 /* List should start with `space'. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1659 xassert (CONSP (it->object) && EQ (XCAR (it->object), Qspace)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1660 plist = XCDR (it->object); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1661 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1662 /* Compute the width of the stretch. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1663 if (prop = Fplist_get (plist, QCwidth), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1664 NUMVAL (prop) > 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1665 /* Absolute width `:width WIDTH' specified and valid. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1666 width = NUMVAL (prop) * CANON_X_UNIT (it->f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1667 else if (prop = Fplist_get (plist, QCrelative_width), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1668 NUMVAL (prop) > 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1669 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1670 /* Relative width `:relative-width FACTOR' specified and valid. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1671 Compute the width of the characters having the `glyph' |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1672 property. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1673 struct it it2; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1674 unsigned char *p = BYTE_POS_ADDR (IT_BYTEPOS (*it)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1675 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1676 it2 = *it; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1677 if (it->multibyte_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1678 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1679 int maxlen = ((IT_BYTEPOS (*it) >= GPT ? ZV : GPT) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1680 - IT_BYTEPOS (*it)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1681 it2.c = STRING_CHAR_AND_LENGTH (p, maxlen, it2.len); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1682 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1683 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1684 it2.c = *p, it2.len = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1685 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1686 it2.glyph_row = NULL; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1687 it2.what = IT_CHARACTER; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1688 x_produce_glyphs (&it2); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1689 width = NUMVAL (prop) * it2.pixel_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1690 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1691 else if (prop = Fplist_get (plist, QCalign_to), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1692 NUMVAL (prop) > 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1693 width = NUMVAL (prop) * CANON_X_UNIT (it->f) - it->current_x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1694 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1695 /* Nothing specified -> width defaults to canonical char width. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1696 width = CANON_X_UNIT (it->f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1697 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1698 /* Compute height. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1699 if (prop = Fplist_get (plist, QCheight), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1700 NUMVAL (prop) > 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1701 height = NUMVAL (prop) * CANON_Y_UNIT (it->f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1702 else if (prop = Fplist_get (plist, QCrelative_height), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1703 NUMVAL (prop) > 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1704 height = FONT_HEIGHT (font) * NUMVAL (prop); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1705 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1706 height = FONT_HEIGHT (font); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1707 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1708 /* Compute percentage of height used for ascent. If |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1709 `:ascent ASCENT' is present and valid, use that. Otherwise, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1710 derive the ascent from the font in use. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1711 if (prop = Fplist_get (plist, QCascent), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1712 NUMVAL (prop) > 0 && NUMVAL (prop) <= 100) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1713 ascent = NUMVAL (prop) / 100.0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1714 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1715 ascent = (double) font->ascent / FONT_HEIGHT (font); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1716 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1717 if (width <= 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1718 width = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1719 if (height <= 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1720 height = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1721 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1722 if (it->glyph_row) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1723 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1724 Lisp_Object object = it->stack[it->sp - 1].string; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1725 if (!STRINGP (object)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1726 object = it->w->buffer; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1727 x_append_stretch_glyph (it, object, width, height, ascent); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1728 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1729 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1730 it->pixel_width = width; |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
1731 it->ascent = it->phys_ascent = height * ascent; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
1732 it->descent = it->phys_descent = height - it->ascent; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1733 it->nglyphs = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1734 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1735 if (face->box != FACE_NO_BOX) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1736 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1737 it->ascent += face->box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1738 it->descent += face->box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1739 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1740 if (it->start_of_box_run_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1741 it->pixel_width += face->box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1742 if (it->end_of_box_run_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1743 it->pixel_width += face->box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1744 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1745 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1746 take_vertical_position_into_account (it); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1747 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1748 |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1749 /* Return proper value to be used as baseline offset of font that has |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1750 ASCENT and DESCENT to draw characters by the font at the vertical |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1751 center of the line of frame F. |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1752 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1753 Here, out task is to find the value of BOFF in the following figure; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1754 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1755 -------------------------+-----------+- |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1756 -+-+---------+-+ | | |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1757 | | | | | | |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1758 | | | | F_ASCENT F_HEIGHT |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1759 | | | ASCENT | | |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1760 HEIGHT | | | | | |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1761 | | |-|-+------+-----------|------- baseline |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1762 | | | | BOFF | | |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1763 | |---------|-+-+ | | |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1764 | | | DESCENT | | |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1765 -+-+---------+-+ F_DESCENT | |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1766 -------------------------+-----------+- |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1767 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1768 -BOFF + DESCENT + (F_HEIGHT - HEIGHT) / 2 = F_DESCENT |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1769 BOFF = DESCENT + (F_HEIGHT - HEIGHT) / 2 - F_DESCENT |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1770 DESCENT = FONT->descent |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1771 HEIGHT = FONT_HEIGHT (FONT) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1772 F_DESCENT = (F->output_data.x->font->descent |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1773 - F->output_data.x->baseline_offset) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1774 F_HEIGHT = FRAME_LINE_HEIGHT (F) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1775 */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1776 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1777 #define VCENTER_BASELINE_OFFSET(FONT, F) \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1778 ((FONT)->descent \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1779 + (FRAME_LINE_HEIGHT ((F)) - FONT_HEIGHT ((FONT))) / 2 \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1780 - ((F)->output_data.x->font->descent - (F)->output_data.x->baseline_offset)) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1781 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1782 /* Produce glyphs/get display metrics for the display element IT is |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1783 loaded with. See the description of struct display_iterator in |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1784 dispextern.h for an overview of struct display_iterator. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1785 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1786 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1787 x_produce_glyphs (it) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1788 struct it *it; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1789 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1790 if (it->what == IT_CHARACTER) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1791 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1792 XChar2b char2b; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1793 XFontStruct *font; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1794 struct face *face; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1795 XCharStruct *pcm; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1796 int font_not_found_p; |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1797 struct font_info *font_info; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1798 int boff; /* baseline offset */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1799 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1800 /* Maybe translate single-byte characters to multibyte. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1801 it->char_to_display = it->c; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1802 if (unibyte_display_via_language_environment |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1803 && SINGLE_BYTE_CHAR_P (it->c) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1804 && (it->c >= 0240 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1805 || (it->c >= 0200 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1806 && !NILP (Vnonascii_translation_table)))) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1807 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1808 it->char_to_display = unibyte_char_to_multibyte (it->c); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1809 it->charset = CHAR_CHARSET (it->char_to_display); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1810 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1811 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1812 /* Get face and font to use. Encode IT->char_to_display. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1813 face = x_get_char_face_and_encoding (it->f, it->char_to_display, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1814 it->face_id, &char2b, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1815 it->multibyte_p); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1816 font = face->font; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1817 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1818 /* When no suitable font found, use the default font. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1819 font_not_found_p = font == NULL; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1820 if (font_not_found_p) |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1821 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1822 font = FRAME_FONT (it->f); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1823 boff = it->f->output_data.x->baseline_offset; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1824 font_info = NULL; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1825 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1826 else |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1827 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1828 font_info = FONT_INFO_FROM_ID (it->f, face->font_info_id); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1829 boff = font_info->baseline_offset; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1830 if (font_info->vertical_centering) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1831 boff = VCENTER_BASELINE_OFFSET (font, it->f) - boff; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1832 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1833 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1834 if (it->char_to_display >= ' ' |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1835 && (!it->multibyte_p || it->char_to_display < 128)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1836 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1837 /* Either unibyte or ASCII. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1838 int stretched_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1839 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1840 it->nglyphs = 1; |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
1841 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
1842 pcm = x_per_char_metric (font, &char2b); |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1843 it->ascent = font->ascent + boff; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1844 it->descent = font->descent - boff; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1845 it->phys_ascent = pcm->ascent + boff; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1846 it->phys_descent = pcm->descent - boff; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1847 it->pixel_width = pcm->width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1848 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1849 /* If this is a space inside a region of text with |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1850 `space-width' property, change its width. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1851 stretched_p = it->char_to_display == ' ' && !NILP (it->space_width); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1852 if (stretched_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1853 it->pixel_width *= XFLOATINT (it->space_width); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1854 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1855 /* If face has a box, add the box thickness to the character |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1856 height. If character has a box line to the left and/or |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1857 right, add the box line width to the character's width. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1858 if (face->box != FACE_NO_BOX) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1859 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1860 int thick = face->box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1861 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1862 it->ascent += thick; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1863 it->descent += thick; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1864 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1865 if (it->start_of_box_run_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1866 it->pixel_width += thick; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1867 if (it->end_of_box_run_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1868 it->pixel_width += thick; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1869 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1870 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1871 /* If face has an overline, add the height of the overline |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1872 (1 pixel) and a 1 pixel margin to the character height. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1873 if (face->overline_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1874 it->ascent += 2; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1875 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1876 take_vertical_position_into_account (it); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1877 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1878 /* If we have to actually produce glyphs, do it. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1879 if (it->glyph_row) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1880 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1881 if (stretched_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1882 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1883 /* Translate a space with a `space-width' property |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1884 into a stretch glyph. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1885 double ascent = (double) font->ascent / FONT_HEIGHT (font); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1886 x_append_stretch_glyph (it, it->object, it->pixel_width, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1887 it->ascent + it->descent, ascent); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1888 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1889 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1890 x_append_glyph (it); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1891 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1892 /* If characters with lbearing or rbearing are displayed |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1893 in this line, record that fact in a flag of the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1894 glyph row. This is used to optimize X output code. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1895 if (pcm->lbearing < 0 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1896 || pcm->rbearing > pcm->width) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1897 it->glyph_row->contains_overlapping_glyphs_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1898 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1899 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1900 else if (it->char_to_display == '\n') |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1901 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1902 /* A newline has no width but we need the height of the line. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1903 it->pixel_width = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1904 it->nglyphs = 0; |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1905 it->ascent = it->phys_ascent = font->ascent + boff; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1906 it->descent = it->phys_descent = font->descent - boff; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1907 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1908 if (face->box != FACE_NO_BOX) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1909 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1910 int thick = face->box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1911 it->ascent += thick; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1912 it->descent += thick; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1913 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1914 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1915 else if (it->char_to_display == '\t') |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1916 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1917 int tab_width = it->tab_width * CANON_X_UNIT (it->f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1918 int x = (it->current_x |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1919 - it->prompt_width |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1920 + it->continuation_lines_width); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1921 int next_tab_x = ((1 + x + tab_width - 1) / tab_width) * tab_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1922 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1923 it->pixel_width = next_tab_x - x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1924 it->nglyphs = 1; |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1925 it->ascent = it->phys_ascent = font->ascent + boff; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1926 it->descent = it->phys_descent = font->descent - boff; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1927 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1928 if (it->glyph_row) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1929 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1930 double ascent = (double) it->ascent / (it->ascent + it->descent); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1931 x_append_stretch_glyph (it, it->object, it->pixel_width, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1932 it->ascent + it->descent, ascent); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1933 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1934 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1935 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1936 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1937 /* A multi-byte character. Assume that the display width of the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1938 character is the width of the character multiplied by the |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1939 width of the font. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1940 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1941 /* If we found a font, this font should give us the right |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1942 metrics. If we didn't find a font, use the frame's |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1943 default font and calculate the width of the character |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1944 from the charset width; this is what old redisplay code |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1945 did. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1946 pcm = x_per_char_metric (font, &char2b); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1947 it->pixel_width = pcm->width; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1948 if (font_not_found_p) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1949 it->pixel_width *= CHARSET_WIDTH (it->charset); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1950 it->nglyphs = 1; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1951 it->ascent = font->ascent + boff; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1952 it->descent = font->descent - boff; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1953 it->phys_ascent = pcm->ascent + boff; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1954 it->phys_descent = pcm->descent - boff; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1955 if (it->glyph_row |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1956 && (pcm->lbearing < 0 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1957 || pcm->rbearing > pcm->width)) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1958 it->glyph_row->contains_overlapping_glyphs_p = 1; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1959 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1960 if (face->box != FACE_NO_BOX) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1961 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1962 int thick = face->box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1963 it->ascent += thick; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1964 it->descent += thick; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1965 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1966 if (it->start_of_box_run_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1967 it->pixel_width += thick; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1968 if (it->end_of_box_run_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1969 it->pixel_width += thick; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1970 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1971 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1972 /* If face has an overline, add the height of the overline |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1973 (1 pixel) and a 1 pixel margin to the character height. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1974 if (face->overline_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1975 it->ascent += 2; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1976 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1977 take_vertical_position_into_account (it); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1978 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1979 if (it->glyph_row) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1980 x_append_glyph (it); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1981 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1982 } |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1983 else if (it->what == IT_COMPOSITION) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1984 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1985 /* Note: A composition is represented as one glyph in the |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1986 glyph matrix. There are no padding glyphs. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1987 XChar2b char2b; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1988 XFontStruct *font; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1989 struct face *face; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1990 XCharStruct *pcm; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1991 int font_not_found_p; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1992 struct font_info *font_info; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1993 int boff; /* baseline offset */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1994 struct composition *cmp = composition_table[it->cmp_id]; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1995 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1996 /* Maybe translate single-byte characters to multibyte. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1997 it->char_to_display = it->c; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1998 if (unibyte_display_via_language_environment |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1999 && SINGLE_BYTE_CHAR_P (it->c) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2000 && (it->c >= 0240 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2001 || (it->c >= 0200 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2002 && !NILP (Vnonascii_translation_table)))) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2003 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2004 it->char_to_display = unibyte_char_to_multibyte (it->c); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2005 it->charset = CHAR_CHARSET (it->char_to_display); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2006 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2007 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2008 /* Get face and font to use. Encode IT->char_to_display. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2009 face = x_get_char_face_and_encoding (it->f, it->char_to_display, |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2010 it->face_id, &char2b, |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2011 it->multibyte_p); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2012 font = face->font; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2013 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2014 /* When no suitable font found, use the default font. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2015 font_not_found_p = font == NULL; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2016 if (font_not_found_p) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2017 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2018 font = FRAME_FONT (it->f); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2019 boff = it->f->output_data.x->baseline_offset; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2020 font_info = NULL; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2021 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2022 else |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2023 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2024 font_info = FONT_INFO_FROM_ID (it->f, face->font_info_id); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2025 boff = font_info->baseline_offset; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2026 if (font_info->vertical_centering) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2027 boff = VCENTER_BASELINE_OFFSET (font, it->f) - boff; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2028 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2029 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2030 /* There are no padding glyphs, so there is only one glyph to |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2031 produce for the composition. Important is that pixel_width, |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2032 ascent and descent are the values of what is drawn by |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2033 draw_glyphs (i.e. the values of the overall glyphs composed). */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2034 it->nglyphs = 1; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2035 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2036 /* If we have not yet calculated pixel size data of glyphs of |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2037 the composition for the current face font, calculate them |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2038 now. Theoretically, we have to check all fonts for the |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2039 glyphs, but that requires much time and memory space. So, |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2040 here we check only the font of the first glyph. This leads |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2041 to incorrect display very rarely, and C-l (recenter) can |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2042 correct the display anyway. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2043 if (cmp->font != (void *) font) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2044 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2045 /* Ascent and descent of the font of the first character of |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2046 this composition (adjusted by baseline offset). Ascent |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2047 and descent of overall glyphs should not be less than |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2048 them respectively. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2049 int font_ascent = font->ascent + boff; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2050 int font_descent = font->descent - boff; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2051 /* Bounding box of the overall glyphs. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2052 int leftmost, rightmost, lowest, highest; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2053 int i; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2054 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2055 cmp->font = (void *) font; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2056 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2057 /* Initialize the bounding box. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2058 pcm = x_per_char_metric (font, &char2b); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2059 leftmost = 0; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2060 rightmost = pcm->width; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2061 lowest = - pcm->descent + boff; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2062 highest = pcm->ascent + boff; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2063 if (font_info |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2064 && font_info->default_ascent |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2065 && CHAR_TABLE_P (Vuse_default_ascent) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2066 && !NILP (Faref (Vuse_default_ascent, |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2067 make_number (it->char_to_display)))) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2068 highest = font_info->default_ascent + boff; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2069 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2070 /* Draw the first glyph at the normal position. It may be |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2071 shifted to right later if some other glyphs are drawn at |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2072 the left. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2073 cmp->offsets[0] = 0; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2074 cmp->offsets[1] = boff; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2075 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2076 /* Set cmp->offsets for the remaining glyphs. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2077 for (i = 1; i < cmp->glyph_len; i++) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2078 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2079 int left, right, btm, top; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2080 int ch = COMPOSITION_GLYPH (cmp, i); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2081 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2082 face = x_get_char_face_and_encoding (it->f, ch, |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2083 it->face_id, &char2b, |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2084 it->multibyte_p); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2085 font = face->font; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2086 if (font == NULL) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2087 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2088 font = FRAME_FONT (it->f); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2089 boff = it->f->output_data.x->baseline_offset; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2090 font_info = NULL; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2091 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2092 else |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2093 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2094 font_info |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2095 = FONT_INFO_FROM_ID (it->f, face->font_info_id); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2096 boff = font_info->baseline_offset; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2097 if (font_info->vertical_centering) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2098 boff = VCENTER_BASELINE_OFFSET (font, it->f) - boff; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2099 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2100 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2101 pcm = x_per_char_metric (font, &char2b); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2102 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2103 if (cmp->method != COMPOSITION_WITH_RULE_ALTCHARS) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2104 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2105 /* Relative composition with or without |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2106 alternate chars. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2107 left = (leftmost + rightmost - pcm->width) / 2; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2108 btm = - pcm->descent + boff; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2109 if (font_info && font_info->relative_compose |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2110 && (! CHAR_TABLE_P (Vignore_relative_composition) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2111 || NILP (Faref (Vignore_relative_composition, |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2112 make_number (ch))))) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2113 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2114 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2115 if (- pcm->descent |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2116 >= font_info->relative_compose) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2117 /* One extra pixel between two glyphs. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2118 btm = highest + 1; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2119 else if (pcm->ascent <= 0) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2120 /* One extra pixel between two glyphs. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2121 btm = lowest - 1 - pcm->ascent - pcm->descent; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2122 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2123 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2124 else |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2125 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2126 /* A composition rule is specified by an integer |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2127 value that encodes global and new reference |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2128 points (GREF and NREF). GREF and NREF are |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2129 specified by numbers as below: |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2130 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2131 0---1---2 -- ascent |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2132 | | |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2133 | | |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2134 | | |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2135 9--10--11 -- center |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2136 | | |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2137 ---3---4---5--- baseline |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2138 | | |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2139 6---7---8 -- descent |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2140 */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2141 int rule = COMPOSITION_RULE (cmp, i); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2142 int gref, nref, grefx, grefy, nrefx, nrefy; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2143 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2144 COMPOSITION_DECODE_RULE (rule, gref, nref); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2145 grefx = gref % 3, nrefx = nref % 3; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2146 grefy = gref / 3, nrefy = nref / 3; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2147 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2148 left = (leftmost |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2149 + grefx * (rightmost - leftmost) / 2 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2150 - nrefx * pcm->width / 2); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2151 btm = ((grefy == 0 ? highest |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2152 : grefy == 1 ? 0 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2153 : grefy == 2 ? lowest |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2154 : (highest + lowest) / 2) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2155 - (nrefy == 0 ? pcm->ascent + pcm->descent |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2156 : nrefy == 1 ? pcm->descent - boff |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2157 : nrefy == 2 ? 0 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2158 : (pcm->ascent + pcm->descent) / 2)); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2159 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2160 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2161 cmp->offsets[i * 2] = left; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2162 cmp->offsets[i * 2 + 1] = btm + pcm->descent; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2163 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2164 /* Update the bounding box of the overall glyphs. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2165 right = left + pcm->width; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2166 top = btm + pcm->descent + pcm->ascent; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2167 if (left < leftmost) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2168 leftmost = left; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2169 if (right > rightmost) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2170 rightmost = right; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2171 if (top > highest) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2172 highest = top; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2173 if (btm < lowest) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2174 lowest = btm; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2175 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2176 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2177 /* If there are glyphs whose x-offsets are negative, |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2178 shift all glyphs to the right and make all x-offsets |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2179 non-negative. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2180 if (leftmost < 0) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2181 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2182 for (i = 0; i < cmp->glyph_len; i++) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2183 cmp->offsets[i * 2] -= leftmost; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2184 rightmost -= leftmost; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2185 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2186 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2187 cmp->pixel_width = rightmost; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2188 cmp->ascent = highest; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2189 cmp->descent = - lowest; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2190 if (cmp->ascent < font_ascent) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2191 cmp->ascent = font_ascent; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2192 if (cmp->descent < font_descent) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2193 cmp->descent = font_descent; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2194 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2195 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2196 it->pixel_width = cmp->pixel_width; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2197 it->ascent = it->phys_ascent = cmp->ascent; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2198 it->descent = it->phys_descent = cmp->descent; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2199 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2200 if (face->box != FACE_NO_BOX) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2201 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2202 int thick = face->box_line_width; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2203 it->ascent += thick; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2204 it->descent += thick; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2205 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2206 if (it->start_of_box_run_p) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2207 it->pixel_width += thick; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2208 if (it->end_of_box_run_p) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2209 it->pixel_width += thick; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2210 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2211 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2212 /* If face has an overline, add the height of the overline |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2213 (1 pixel) and a 1 pixel margin to the character height. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2214 if (face->overline_p) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2215 it->ascent += 2; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2216 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2217 take_vertical_position_into_account (it); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2218 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2219 if (it->glyph_row) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2220 x_append_composite_glyph (it); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2221 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2222 else if (it->what == IT_IMAGE) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2223 x_produce_image_glyph (it); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2224 else if (it->what == IT_STRETCH) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2225 x_produce_stretch_glyph (it); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2226 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2227 /* Accumulate dimensions. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2228 xassert (it->ascent >= 0 && it->descent > 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2229 if (it->area == TEXT_AREA) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2230 it->current_x += it->pixel_width; |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2231 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2232 it->max_ascent = max (it->max_ascent, it->ascent); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2233 it->max_descent = max (it->max_descent, it->descent); |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2234 it->max_phys_ascent = max (it->max_phys_ascent, it->phys_ascent); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2235 it->max_phys_descent = max (it->max_phys_descent, it->phys_descent); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2236 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2237 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2238 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2239 /* Estimate the pixel height of the mode or top line on frame F. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2240 FACE_ID specifies what line's height to estimate. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2241 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2242 int |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2243 x_estimate_mode_line_height (f, face_id) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2244 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2245 enum face_id face_id; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2246 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2247 int height = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2248 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2249 /* This function is called so early when Emacs starts that the face |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2250 cache and mode line face are not yet initialized. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2251 if (FRAME_FACE_CACHE (f)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2252 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2253 struct face *face = FACE_FROM_ID (f, face_id); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2254 if (face) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2255 height = FONT_HEIGHT (face->font) + 2 * face->box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2256 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2257 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2258 return height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2259 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2260 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2261 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2262 /*********************************************************************** |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2263 Glyph display |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2264 ***********************************************************************/ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2265 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2266 /* A sequence of glyphs to be drawn in the same face. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2267 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2268 This data structure is not really completely X specific, so it |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2269 could possibly, at least partially, be useful for other systems. It |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2270 is currently not part of the external redisplay interface because |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2271 it's not clear what other systems will need. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2272 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2273 struct glyph_string |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2274 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2275 /* X-origin of the string. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2276 int x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2277 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2278 /* Y-origin and y-position of the base line of this string. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2279 int y, ybase; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2280 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2281 /* The width of the string, not including a face extension. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2282 int width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2283 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2284 /* The width of the string, including a face extension. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2285 int background_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2286 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2287 /* The height of this string. This is the height of the line this |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2288 string is drawn in, and can be different from the height of the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2289 font the string is drawn in. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2290 int height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2291 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2292 /* Number of pixels this string overwrites in front of its x-origin. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2293 This number is zero if the string has an lbearing >= 0; it is |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2294 -lbearing, if the string has an lbearing < 0. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2295 int left_overhang; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2296 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2297 /* Number of pixels this string overwrites past its right-most |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2298 nominal x-position, i.e. x + width. Zero if the string's |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2299 rbearing is <= its nominal width, rbearing - width otherwise. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2300 int right_overhang; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2301 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2302 /* The frame on which the glyph string is drawn. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2303 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2304 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2305 /* The window on which the glyph string is drawn. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2306 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2307 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2308 /* X display and window for convenience. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2309 Display *display; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2310 Window window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2311 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2312 /* The glyph row for which this string was built. It determines the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2313 y-origin and height of the string. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2314 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2315 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2316 /* The area within row. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2317 enum glyph_row_area area; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2318 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2319 /* Characters to be drawn, and number of characters. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2320 XChar2b *char2b; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2321 int nchars; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2322 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2323 /* Character set of this glyph string. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2324 int charset; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2325 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2326 /* A face-override for drawing cursors, mouse face and similar. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2327 enum draw_glyphs_face hl; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2328 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2329 /* Face in which this string is to be drawn. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2330 struct face *face; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2331 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2332 /* Font in which this string is to be drawn. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2333 XFontStruct *font; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2334 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2335 /* Font info for this string. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2336 struct font_info *font_info; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2337 |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2338 /* Non-null means this string describes (part of) a composition. |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2339 All characters from char2b are drawn composed. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2340 struct composition *cmp; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2341 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2342 /* Index of this glyph string's first character in the glyph |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2343 definition of CMP. If this is zero, this glyph string describes |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2344 the first character of a composition. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2345 int gidx; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2346 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2347 /* 1 means this glyph strings face has to be drawn to the right end |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2348 of the window's drawing area. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2349 unsigned extends_to_end_of_line_p : 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2350 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2351 /* 1 means the background of this string has been drawn. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2352 unsigned background_filled_p : 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2353 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2354 /* 1 means glyph string must be drawn with 16-bit functions. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2355 unsigned two_byte_p : 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2356 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2357 /* 1 means that the original font determined for drawing this glyph |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2358 string could not be loaded. The member `font' has been set to |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2359 the frame's default font in this case. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2360 unsigned font_not_found_p : 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2361 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2362 /* 1 means that the face in which this glyph string is drawn has a |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2363 stipple pattern. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2364 unsigned stippled_p : 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2365 |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2366 /* 1 means only the foreground of this glyph string must be drawn, |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2367 and we should use the physical height of the line this glyph |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2368 string appears in as clip rect. */ |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2369 unsigned for_overlaps_p : 1; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2370 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2371 /* The GC to use for drawing this glyph string. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2372 GC gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2373 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2374 /* A pointer to the first glyph in the string. This glyph |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2375 corresponds to char2b[0]. Needed to draw rectangles if |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2376 font_not_found_p is 1. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2377 struct glyph *first_glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2378 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2379 /* Image, if any. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2380 struct image *img; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2381 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2382 struct glyph_string *next, *prev; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2383 }; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2384 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2385 |
25716
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
2386 #if 0 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2387 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2388 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2389 x_dump_glyph_string (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2390 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2391 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2392 fprintf (stderr, "glyph string\n"); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2393 fprintf (stderr, " x, y, w, h = %d, %d, %d, %d\n", |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2394 s->x, s->y, s->width, s->height); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2395 fprintf (stderr, " ybase = %d\n", s->ybase); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2396 fprintf (stderr, " hl = %d\n", s->hl); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2397 fprintf (stderr, " left overhang = %d, right = %d\n", |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2398 s->left_overhang, s->right_overhang); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2399 fprintf (stderr, " nchars = %d\n", s->nchars); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2400 fprintf (stderr, " extends to end of line = %d\n", |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2401 s->extends_to_end_of_line_p); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2402 fprintf (stderr, " font height = %d\n", FONT_HEIGHT (s->font)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2403 fprintf (stderr, " bg width = %d\n", s->background_width); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2404 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2405 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2406 #endif /* GLYPH_DEBUG */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2407 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2408 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2409 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2410 static void x_append_glyph_string_lists P_ ((struct glyph_string **, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2411 struct glyph_string **, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2412 struct glyph_string *, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2413 struct glyph_string *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2414 static void x_prepend_glyph_string_lists P_ ((struct glyph_string **, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2415 struct glyph_string **, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2416 struct glyph_string *, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2417 struct glyph_string *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2418 static void x_append_glyph_string P_ ((struct glyph_string **, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2419 struct glyph_string **, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2420 struct glyph_string *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2421 static int x_left_overwritten P_ ((struct glyph_string *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2422 static int x_left_overwriting P_ ((struct glyph_string *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2423 static int x_right_overwritten P_ ((struct glyph_string *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2424 static int x_right_overwriting P_ ((struct glyph_string *)); |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2425 static int x_fill_glyph_string P_ ((struct glyph_string *, int, int, int, |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2426 int)); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2427 static void x_init_glyph_string P_ ((struct glyph_string *, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2428 XChar2b *, struct window *, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2429 struct glyph_row *, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2430 enum glyph_row_area, int, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2431 enum draw_glyphs_face)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2432 static int x_draw_glyphs P_ ((struct window *, int , struct glyph_row *, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2433 enum glyph_row_area, int, int, |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2434 enum draw_glyphs_face, int *, int *, int)); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2435 static void x_set_glyph_string_clipping P_ ((struct glyph_string *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2436 static void x_set_glyph_string_gc P_ ((struct glyph_string *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2437 static void x_draw_glyph_string_background P_ ((struct glyph_string *, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2438 int)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2439 static void x_draw_glyph_string_foreground P_ ((struct glyph_string *)); |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2440 static void x_draw_composite_glyph_string_foreground P_ ((struct glyph_string *)); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2441 static void x_draw_glyph_string_box P_ ((struct glyph_string *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2442 static void x_draw_glyph_string P_ ((struct glyph_string *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2443 static void x_compute_glyph_string_overhangs P_ ((struct glyph_string *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2444 static void x_set_cursor_gc P_ ((struct glyph_string *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2445 static void x_set_mode_line_face_gc P_ ((struct glyph_string *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2446 static void x_set_mouse_face_gc P_ ((struct glyph_string *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2447 static void x_get_glyph_overhangs P_ ((struct glyph *, struct frame *, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2448 int *, int *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2449 static void x_compute_overhangs_and_x P_ ((struct glyph_string *, int, int)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2450 static int x_alloc_lighter_color P_ ((struct frame *, Display *, Colormap, |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25921
diff
changeset
|
2451 unsigned long *, double, int)); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2452 static void x_setup_relief_color P_ ((struct frame *, struct relief *, |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25921
diff
changeset
|
2453 double, int, unsigned long)); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2454 static void x_setup_relief_colors P_ ((struct glyph_string *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2455 static void x_draw_image_glyph_string P_ ((struct glyph_string *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2456 static void x_draw_image_relief P_ ((struct glyph_string *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2457 static void x_draw_image_foreground P_ ((struct glyph_string *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2458 static void x_draw_image_foreground_1 P_ ((struct glyph_string *, Pixmap)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2459 static void x_fill_image_glyph_string P_ ((struct glyph_string *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2460 static void x_clear_glyph_string_rect P_ ((struct glyph_string *, int, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2461 int, int, int)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2462 static void x_draw_relief_rect P_ ((struct frame *, int, int, int, int, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2463 int, int, int, int, XRectangle *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2464 static void x_draw_box_rect P_ ((struct glyph_string *, int, int, int, int, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2465 int, int, int, XRectangle *)); |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2466 static void x_fix_overlapping_area P_ ((struct window *, struct glyph_row *, |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2467 enum glyph_row_area)); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2468 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2469 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2470 /* Append the list of glyph strings with head H and tail T to the list |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2471 with head *HEAD and tail *TAIL. Set *HEAD and *TAIL to the result. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2472 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2473 static INLINE void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2474 x_append_glyph_string_lists (head, tail, h, t) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2475 struct glyph_string **head, **tail; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2476 struct glyph_string *h, *t; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2477 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2478 if (h) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2479 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2480 if (*head) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2481 (*tail)->next = h; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2482 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2483 *head = h; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2484 h->prev = *tail; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2485 *tail = t; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2486 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2487 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2488 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2489 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2490 /* Prepend the list of glyph strings with head H and tail T to the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2491 list with head *HEAD and tail *TAIL. Set *HEAD and *TAIL to the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2492 result. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2493 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2494 static INLINE void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2495 x_prepend_glyph_string_lists (head, tail, h, t) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2496 struct glyph_string **head, **tail; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2497 struct glyph_string *h, *t; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2498 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2499 if (h) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2500 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2501 if (*head) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2502 (*head)->prev = t; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2503 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2504 *tail = t; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2505 t->next = *head; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2506 *head = h; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2507 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2508 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2509 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2510 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2511 /* Append glyph string S to the list with head *HEAD and tail *TAIL. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2512 Set *HEAD and *TAIL to the resulting list. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2513 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2514 static INLINE void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2515 x_append_glyph_string (head, tail, s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2516 struct glyph_string **head, **tail; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2517 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2518 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2519 s->next = s->prev = NULL; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2520 x_append_glyph_string_lists (head, tail, s, s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2521 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2522 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2523 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2524 /* Set S->gc to a suitable GC for drawing glyph string S in cursor |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2525 face. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2526 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2527 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2528 x_set_cursor_gc (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2529 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2530 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2531 if (s->font == FRAME_FONT (s->f) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2532 && s->face->background == FRAME_BACKGROUND_PIXEL (s->f) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2533 && s->face->foreground == FRAME_FOREGROUND_PIXEL (s->f) |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2534 && !s->cmp) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2535 s->gc = s->f->output_data.x->cursor_gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2536 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2537 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2538 /* Cursor on non-default face: must merge. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2539 XGCValues xgcv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2540 unsigned long mask; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2541 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2542 xgcv.background = s->f->output_data.x->cursor_pixel; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2543 xgcv.foreground = s->face->background; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2544 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2545 /* If the glyph would be invisible, try a different foreground. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2546 if (xgcv.foreground == xgcv.background) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2547 xgcv.foreground = s->face->foreground; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2548 if (xgcv.foreground == xgcv.background) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2549 xgcv.foreground = s->f->output_data.x->cursor_foreground_pixel; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2550 if (xgcv.foreground == xgcv.background) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2551 xgcv.foreground = s->face->foreground; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2552 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2553 /* Make sure the cursor is distinct from text in this face. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2554 if (xgcv.background == s->face->background |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2555 && xgcv.foreground == s->face->foreground) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2556 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2557 xgcv.background = s->face->foreground; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2558 xgcv.foreground = s->face->background; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2559 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2560 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2561 IF_DEBUG (x_check_font (s->f, s->font)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2562 xgcv.font = s->font->fid; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2563 xgcv.graphics_exposures = False; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2564 mask = GCForeground | GCBackground | GCFont | GCGraphicsExposures; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2565 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2566 if (FRAME_X_DISPLAY_INFO (s->f)->scratch_cursor_gc) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2567 XChangeGC (s->display, FRAME_X_DISPLAY_INFO (s->f)->scratch_cursor_gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2568 mask, &xgcv); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2569 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2570 FRAME_X_DISPLAY_INFO (s->f)->scratch_cursor_gc |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2571 = XCreateGC (s->display, s->window, mask, &xgcv); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2572 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2573 s->gc = FRAME_X_DISPLAY_INFO (s->f)->scratch_cursor_gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2574 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2575 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2576 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2577 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2578 /* Set up S->gc of glyph string S for drawing text in mouse face. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2579 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2580 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2581 x_set_mouse_face_gc (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2582 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2583 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2584 int face_id; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2585 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2586 /* What face has to be used for the mouse face? */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2587 face_id = FRAME_X_DISPLAY_INFO (s->f)->mouse_face_face_id; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2588 face_id = FACE_FOR_CHARSET (s->f, face_id, s->charset); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2589 s->face = FACE_FROM_ID (s->f, face_id); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2590 PREPARE_FACE_FOR_DISPLAY (s->f, s->face); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2591 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2592 /* If font in this face is same as S->font, use it. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2593 if (s->font == s->face->font) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2594 s->gc = s->face->gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2595 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2596 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2597 /* Otherwise construct scratch_cursor_gc with values from FACE |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2598 but font FONT. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2599 XGCValues xgcv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2600 unsigned long mask; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2601 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2602 xgcv.background = s->face->background; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2603 xgcv.foreground = s->face->foreground; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2604 IF_DEBUG (x_check_font (s->f, s->font)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2605 xgcv.font = s->font->fid; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2606 xgcv.graphics_exposures = False; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2607 mask = GCForeground | GCBackground | GCFont | GCGraphicsExposures; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2608 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2609 if (FRAME_X_DISPLAY_INFO (s->f)->scratch_cursor_gc) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2610 XChangeGC (s->display, FRAME_X_DISPLAY_INFO (s->f)->scratch_cursor_gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2611 mask, &xgcv); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2612 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2613 FRAME_X_DISPLAY_INFO (s->f)->scratch_cursor_gc |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2614 = XCreateGC (s->display, s->window, mask, &xgcv); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2615 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2616 s->gc = FRAME_X_DISPLAY_INFO (s->f)->scratch_cursor_gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2617 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2618 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2619 xassert (s->gc != 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2620 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2621 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2622 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2623 /* Set S->gc of glyph string S to a GC suitable for drawing a mode line. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2624 Faces to use in the mode line have already been computed when the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2625 matrix was built, so there isn't much to do, here. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2626 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2627 static INLINE void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2628 x_set_mode_line_face_gc (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2629 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2630 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2631 s->gc = s->face->gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2632 xassert (s->gc != 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2633 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2634 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2635 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2636 /* Set S->gc of glyph string S for drawing that glyph string. Set |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2637 S->stippled_p to a non-zero value if the face of S has a stipple |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2638 pattern. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2639 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2640 static INLINE void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2641 x_set_glyph_string_gc (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2642 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2643 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2644 if (s->hl == DRAW_NORMAL_TEXT) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2645 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2646 s->gc = s->face->gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2647 s->stippled_p = s->face->stipple != 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2648 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2649 else if (s->hl == DRAW_INVERSE_VIDEO) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2650 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2651 x_set_mode_line_face_gc (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2652 s->stippled_p = s->face->stipple != 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2653 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2654 else if (s->hl == DRAW_CURSOR) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2655 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2656 x_set_cursor_gc (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2657 s->stippled_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2658 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2659 else if (s->hl == DRAW_MOUSE_FACE) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2660 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2661 x_set_mouse_face_gc (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2662 s->stippled_p = s->face->stipple != 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2663 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2664 else if (s->hl == DRAW_IMAGE_RAISED |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2665 || s->hl == DRAW_IMAGE_SUNKEN) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2666 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2667 s->gc = s->face->gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2668 s->stippled_p = s->face->stipple != 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2669 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2670 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2671 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2672 s->gc = s->face->gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2673 s->stippled_p = s->face->stipple != 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2674 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2675 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2676 /* GC must have been set. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2677 xassert (s->gc != 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2678 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2679 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2680 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2681 /* Return in *R the clipping rectangle for glyph string S. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2682 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2683 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2684 x_get_glyph_string_clip_rect (s, r) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2685 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2686 XRectangle *r; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2687 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2688 if (s->row->full_width_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2689 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2690 /* Draw full-width. X coordinates are relative to S->w->left. */ |
25079
3a09aae52441
(x_get_glyph_string_clip_rect): Take internal border
Gerd Moellmann <gerd@gnu.org>
parents:
25068
diff
changeset
|
2691 int canon_x = CANON_X_UNIT (s->f); |
3a09aae52441
(x_get_glyph_string_clip_rect): Take internal border
Gerd Moellmann <gerd@gnu.org>
parents:
25068
diff
changeset
|
2692 |
3a09aae52441
(x_get_glyph_string_clip_rect): Take internal border
Gerd Moellmann <gerd@gnu.org>
parents:
25068
diff
changeset
|
2693 r->x = WINDOW_LEFT_MARGIN (s->w) * canon_x; |
3a09aae52441
(x_get_glyph_string_clip_rect): Take internal border
Gerd Moellmann <gerd@gnu.org>
parents:
25068
diff
changeset
|
2694 r->width = XFASTINT (s->w->width) * canon_x; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2695 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2696 if (FRAME_HAS_VERTICAL_SCROLL_BARS (s->f)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2697 { |
25079
3a09aae52441
(x_get_glyph_string_clip_rect): Take internal border
Gerd Moellmann <gerd@gnu.org>
parents:
25068
diff
changeset
|
2698 int width = FRAME_SCROLL_BAR_WIDTH (s->f) * canon_x; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2699 if (FRAME_HAS_VERTICAL_SCROLL_BARS_ON_LEFT (s->f)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2700 r->x -= width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2701 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2702 |
25083
d3b7d7d2bca8
(x_setup_relief_color): Don't try smart color allocation
Gerd Moellmann <gerd@gnu.org>
parents:
25079
diff
changeset
|
2703 r->x += FRAME_INTERNAL_BORDER_WIDTH (s->f); |
25079
3a09aae52441
(x_get_glyph_string_clip_rect): Take internal border
Gerd Moellmann <gerd@gnu.org>
parents:
25068
diff
changeset
|
2704 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2705 /* Unless displaying a mode or menu bar line, which are always |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2706 fully visible, clip to the visible part of the row. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2707 if (s->w->pseudo_window_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2708 r->height = s->row->visible_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2709 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2710 r->height = s->height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2711 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2712 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2713 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2714 /* This is a text line that may be partially visible. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2715 r->x = WINDOW_AREA_TO_FRAME_PIXEL_X (s->w, s->area, 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2716 r->width = window_box_width (s->w, s->area); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2717 r->height = s->row->visible_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2718 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2719 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2720 /* Don't use S->y for clipping because it doesn't take partially |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2721 visible lines into account. For example, it can be negative for |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2722 partially visible lines at the top of a window. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2723 if (!s->row->full_width_p |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2724 && MATRIX_ROW_PARTIALLY_VISIBLE_AT_TOP_P (s->w, s->row)) |
25546 | 2725 r->y = WINDOW_DISPLAY_HEADER_LINE_HEIGHT (s->w); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2726 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2727 r->y = max (0, s->row->y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2728 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
2729 /* If drawing a tool-bar window, draw it over the internal border |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2730 at the top of the window. */ |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
2731 if (s->w == XWINDOW (s->f->tool_bar_window)) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2732 r->y -= s->f->output_data.x->internal_border_width; |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2733 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2734 /* If S draws overlapping rows, it's sufficient to use the top and |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2735 bottom of the window for clipping because this glyph string |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2736 intentionally draws over other lines. */ |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2737 if (s->for_overlaps_p) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2738 { |
25546 | 2739 r->y = WINDOW_DISPLAY_HEADER_LINE_HEIGHT (s->w); |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2740 r->height = window_text_bottom_y (s->w) - r->y; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2741 } |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2742 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2743 r->y = WINDOW_TO_FRAME_PIXEL_Y (s->w, r->y); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2744 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2745 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2746 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2747 /* Set clipping for output of glyph string S. S may be part of a mode |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2748 line or menu if we don't have X toolkit support. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2749 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2750 static INLINE void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2751 x_set_glyph_string_clipping (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2752 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2753 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2754 XRectangle r; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2755 x_get_glyph_string_clip_rect (s, &r); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2756 XSetClipRectangles (s->display, s->gc, 0, 0, &r, 1, Unsorted); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2757 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2758 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2759 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2760 /* Compute left and right overhang of glyph string S. If S is a glyph |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2761 string for a composition, assume overhangs don't exist. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2762 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2763 static INLINE void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2764 x_compute_glyph_string_overhangs (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2765 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2766 { |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2767 if (s->cmp == NULL |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2768 && s->first_glyph->type == CHAR_GLYPH) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2769 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2770 XCharStruct cs; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2771 int direction, font_ascent, font_descent; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2772 XTextExtents16 (s->font, s->char2b, s->nchars, &direction, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2773 &font_ascent, &font_descent, &cs); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2774 s->right_overhang = cs.rbearing > cs.width ? cs.rbearing - cs.width : 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2775 s->left_overhang = cs.lbearing < 0 ? -cs.lbearing : 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2776 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2777 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2778 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2779 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2780 /* Compute overhangs and x-positions for glyph string S and its |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2781 predecessors, or successors. X is the starting x-position for S. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2782 BACKWARD_P non-zero means process predecessors. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2783 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2784 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2785 x_compute_overhangs_and_x (s, x, backward_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2786 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2787 int x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2788 int backward_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2789 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2790 if (backward_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2791 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2792 while (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2793 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2794 x_compute_glyph_string_overhangs (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2795 x -= s->width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2796 s->x = x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2797 s = s->prev; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2798 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2799 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2800 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2801 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2802 while (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2803 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2804 x_compute_glyph_string_overhangs (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2805 s->x = x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2806 x += s->width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2807 s = s->next; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2808 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2809 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2810 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2811 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2812 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2813 /* Set *LEFT and *RIGHT to the left and right overhang of GLYPH on |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2814 frame F. Overhangs of glyphs other than type CHAR_GLYPH are |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2815 assumed to be zero. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2816 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2817 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2818 x_get_glyph_overhangs (glyph, f, left, right) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2819 struct glyph *glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2820 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2821 int *left, *right; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2822 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2823 int c; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2824 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2825 *left = *right = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2826 |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2827 if (glyph->type == CHAR_GLYPH) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2828 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2829 XFontStruct *font; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2830 struct face *face; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2831 struct font_info *font_info; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2832 XChar2b char2b; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2833 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2834 face = x_get_glyph_face_and_encoding (f, glyph, &char2b); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2835 font = face->font; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2836 font_info = FONT_INFO_FROM_ID (f, face->font_info_id); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2837 if (font) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2838 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2839 XCharStruct *pcm = x_per_char_metric (font, &char2b); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2840 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2841 if (pcm->rbearing > pcm->width) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2842 *right = pcm->rbearing - pcm->width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2843 if (pcm->lbearing < 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2844 *left = -pcm->lbearing; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2845 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2846 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2847 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2848 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2849 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2850 /* Return the index of the first glyph preceding glyph string S that |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2851 is overwritten by S because of S's left overhang. Value is -1 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2852 if no glyphs are overwritten. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2853 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2854 static int |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2855 x_left_overwritten (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2856 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2857 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2858 int k; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2859 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2860 if (s->left_overhang) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2861 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2862 int x = 0, i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2863 struct glyph *glyphs = s->row->glyphs[s->area]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2864 int first = s->first_glyph - glyphs; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2865 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2866 for (i = first - 1; i >= 0 && x > -s->left_overhang; --i) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2867 x -= glyphs[i].pixel_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2868 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2869 k = i + 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2870 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2871 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2872 k = -1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2873 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2874 return k; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2875 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2876 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2877 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2878 /* Return the index of the first glyph preceding glyph string S that |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2879 is overwriting S because of its right overhang. Value is -1 if no |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2880 glyph in front of S overwrites S. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2881 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2882 static int |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2883 x_left_overwriting (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2884 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2885 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2886 int i, k, x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2887 struct glyph *glyphs = s->row->glyphs[s->area]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2888 int first = s->first_glyph - glyphs; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2889 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2890 k = -1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2891 x = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2892 for (i = first - 1; i >= 0; --i) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2893 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2894 int left, right; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2895 x_get_glyph_overhangs (glyphs + i, s->f, &left, &right); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2896 if (x + right > 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2897 k = i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2898 x -= glyphs[i].pixel_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2899 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2900 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2901 return k; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2902 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2903 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2904 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2905 /* Return the index of the last glyph following glyph string S that is |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2906 not overwritten by S because of S's right overhang. Value is -1 if |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2907 no such glyph is found. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2908 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2909 static int |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2910 x_right_overwritten (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2911 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2912 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2913 int k = -1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2914 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2915 if (s->right_overhang) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2916 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2917 int x = 0, i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2918 struct glyph *glyphs = s->row->glyphs[s->area]; |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2919 int first = (s->first_glyph - glyphs) + (s->cmp ? 1 : s->nchars); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2920 int end = s->row->used[s->area]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2921 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2922 for (i = first; i < end && s->right_overhang > x; ++i) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2923 x += glyphs[i].pixel_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2924 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2925 k = i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2926 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2927 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2928 return k; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2929 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2930 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2931 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2932 /* Return the index of the last glyph following glyph string S that |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2933 overwrites S because of its left overhang. Value is negative |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2934 if no such glyph is found. */ |
2732
8b55aa587d3c
* xdisp.c (display_text_line): Apply faces to characters
Jim Blandy <jimb@redhat.com>
parents:
2661
diff
changeset
|
2935 |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
2936 static int |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2937 x_right_overwriting (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2938 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2939 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2940 int i, k, x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2941 int end = s->row->used[s->area]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2942 struct glyph *glyphs = s->row->glyphs[s->area]; |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2943 int first = (s->first_glyph - glyphs) + (s->cmp ? 1 : s->nchars); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2944 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2945 k = -1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2946 x = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2947 for (i = first; i < end; ++i) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2948 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2949 int left, right; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2950 x_get_glyph_overhangs (glyphs + i, s->f, &left, &right); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2951 if (x - left < 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2952 k = i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2953 x += glyphs[i].pixel_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2954 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2955 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2956 return k; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2957 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2958 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2959 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2960 /* Fill rectangle X, Y, W, H with background color of glyph string S. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2961 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2962 static INLINE void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2963 x_clear_glyph_string_rect (s, x, y, w, h) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2964 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2965 int x, y, w, h; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2966 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2967 XGCValues xgcv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2968 XGetGCValues (s->display, s->gc, GCForeground | GCBackground, &xgcv); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2969 XSetForeground (s->display, s->gc, xgcv.background); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2970 XFillRectangle (s->display, s->window, s->gc, x, y, w, h); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2971 XSetForeground (s->display, s->gc, xgcv.foreground); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2972 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2973 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2974 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2975 /* Draw the background of glyph_string S. If S->background_filled_p |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2976 is non-zero don't draw it. FORCE_P non-zero means draw the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2977 background even if it wouldn't be drawn normally. This is used |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2978 when a string preceding S draws into the background of S, or S |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2979 contains the first component of a composition. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2980 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2981 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2982 x_draw_glyph_string_background (s, force_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2983 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2984 int force_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2985 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2986 /* Nothing to do if background has already been drawn or if it |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2987 shouldn't be drawn in the first place. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2988 if (!s->background_filled_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2989 { |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2990 if (s->stippled_p) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2991 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2992 /* Fill background with a stipple pattern. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2993 XSetFillStyle (s->display, s->gc, FillOpaqueStippled); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2994 XFillRectangle (s->display, s->window, s->gc, s->x, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2995 s->y + s->face->box_line_width, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2996 s->background_width, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2997 s->height - 2 * s->face->box_line_width); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2998 XSetFillStyle (s->display, s->gc, FillSolid); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2999 s->background_filled_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3000 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3001 else if (FONT_HEIGHT (s->font) < s->height - 2 * s->face->box_line_width |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3002 || s->font_not_found_p |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3003 || s->extends_to_end_of_line_p |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3004 || force_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3005 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3006 x_clear_glyph_string_rect (s, s->x, s->y + s->face->box_line_width, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3007 s->background_width, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3008 s->height - 2 * s->face->box_line_width); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3009 s->background_filled_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3010 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3011 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3012 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3013 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3014 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3015 /* Draw the foreground of glyph string S. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3016 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3017 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3018 x_draw_glyph_string_foreground (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3019 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3020 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3021 int i, x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3022 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3023 /* If first glyph of S has a left box line, start drawing the text |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3024 of S to the right of that box line. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3025 if (s->face->box != FACE_NO_BOX |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3026 && s->first_glyph->left_box_line_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3027 x = s->x + s->face->box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3028 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3029 x = s->x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3030 |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3031 /* Draw characters of S as rectangles if S's font could not be |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3032 loaded. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3033 if (s->font_not_found_p) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3034 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3035 for (i = 0; i < s->nchars; ++i) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3036 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3037 struct glyph *g = s->first_glyph + i; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3038 XDrawRectangle (s->display, s->window, |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3039 s->gc, x, s->y, g->pixel_width - 1, |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3040 s->height - 1); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3041 x += g->pixel_width; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3042 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3043 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3044 else |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3045 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3046 char *char1b = (char *) s->char2b; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3047 int boff = s->font_info->baseline_offset; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3048 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3049 if (s->font_info->vertical_centering) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3050 boff = VCENTER_BASELINE_OFFSET (s->font, s->f) - boff; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3051 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3052 /* If we can use 8-bit functions, condense S->char2b. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3053 if (!s->two_byte_p) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3054 for (i = 0; i < s->nchars; ++i) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3055 char1b[i] = s->char2b[i].byte2; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3056 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3057 /* Draw text with XDrawString if background has already been |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3058 filled. Otherwise, use XDrawImageString. (Note that |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3059 XDrawImageString is usually faster than XDrawString.) Always |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3060 use XDrawImageString when drawing the cursor so that there is |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3061 no chance that characters under a box cursor are invisible. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3062 if (s->for_overlaps_p |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3063 || (s->background_filled_p && s->hl != DRAW_CURSOR)) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3064 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3065 /* Draw characters with 16-bit or 8-bit functions. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3066 if (s->two_byte_p) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3067 XDrawString16 (s->display, s->window, s->gc, x, |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3068 s->ybase - boff, s->char2b, s->nchars); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3069 else |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3070 XDrawString (s->display, s->window, s->gc, x, |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3071 s->ybase - boff, char1b, s->nchars); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3072 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3073 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3074 { |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3075 if (s->two_byte_p) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3076 XDrawImageString16 (s->display, s->window, s->gc, x, |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3077 s->ybase - boff, s->char2b, s->nchars); |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
3078 else |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3079 XDrawImageString (s->display, s->window, s->gc, x, |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3080 s->ybase - boff, char1b, s->nchars); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3081 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3082 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3083 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3084 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3085 /* Draw the foreground of composite glyph string S. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3086 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3087 static void |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3088 x_draw_composite_glyph_string_foreground (s) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3089 struct glyph_string *s; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3090 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3091 int i, x; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3092 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3093 /* If first glyph of S has a left box line, start drawing the text |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3094 of S to the right of that box line. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3095 if (s->face->box != FACE_NO_BOX |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3096 && s->first_glyph->left_box_line_p) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3097 x = s->x + s->face->box_line_width; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3098 else |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3099 x = s->x; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3100 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3101 /* S is a glyph string for a composition. S->gidx is the index of |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3102 the first character drawn for glyphs of this composition. |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3103 S->gidx == 0 means we are drawing the very first character of |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3104 this composition. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3105 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3106 /* Draw a rectangle for the composition if the font for the very |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3107 first character of the composition could not be loaded. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3108 if (s->font_not_found_p) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3109 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3110 if (s->gidx == 0) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3111 XDrawRectangle (s->display, s->window, s->gc, x, s->y, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3112 s->width - 1, s->height - 1); |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3113 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3114 else |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3115 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3116 for (i = 0; i < s->nchars; i++, ++s->gidx) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3117 XDrawString16 (s->display, s->window, s->gc, |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3118 x + s->cmp->offsets[s->gidx * 2], |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3119 s->ybase - s->cmp->offsets[s->gidx * 2 + 1], |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3120 s->char2b + i, 1); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3121 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3122 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3123 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3124 |
25529
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3125 #ifdef USE_X_TOOLKIT |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3126 |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3127 /* Allocate the color COLOR->pixel on the screen and display of |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3128 widget WIDGET in colormap CMAP. If an exact match cannot be |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3129 allocated, try the nearest color available. Value is non-zero |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3130 if successful. This is called from lwlib. */ |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3131 |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3132 int |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3133 x_alloc_nearest_color_for_widget (widget, cmap, color) |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3134 Widget widget; |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3135 Colormap cmap; |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3136 XColor *color; |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3137 { |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3138 struct frame *f; |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3139 struct x_display_info *dpyinfo; |
25716
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
3140 Lisp_Object tail; |
25529
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3141 |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3142 dpyinfo = x_display_info_for_display (XtDisplay (widget)); |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3143 |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3144 /* Find the top-level shell of the widget. Note that this function |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3145 can be called when the widget is not yet realized, so XtWindow |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3146 (widget) == 0. That's the reason we can't simply use |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3147 x_any_window_to_frame. */ |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3148 while (!XtIsTopLevelShell (widget)) |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3149 widget = XtParent (widget); |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3150 |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3151 /* Look for a frame with that top-level widget. Allocate the color |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3152 on that frame to get the right gamma correction value. */ |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3153 for (tail = Vframe_list; GC_CONSP (tail); tail = XCDR (tail)) |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3154 if (GC_FRAMEP (XCAR (tail)) |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3155 && (f = XFRAME (XCAR (tail)), |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3156 (f->output_data.nothing != 1 |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3157 && FRAME_X_DISPLAY_INFO (f) == dpyinfo)) |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3158 && f->output_data.x->widget == widget) |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3159 return x_alloc_nearest_color (f, cmap, color); |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3160 |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3161 abort (); |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3162 } |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3163 |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3164 #endif /* USE_X_TOOLKIT */ |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3165 |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3166 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3167 /* Allocate the color COLOR->pixel on SCREEN of DISPLAY, colormap |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3168 CMAP. If an exact match can't be allocated, try the nearest color |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3169 available. Value is non-zero if successful. Set *COLOR to the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3170 color allocated. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3171 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3172 int |
25529
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3173 x_alloc_nearest_color (f, cmap, color) |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3174 struct frame *f; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3175 Colormap cmap; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3176 XColor *color; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3177 { |
25529
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3178 Display *display = FRAME_X_DISPLAY (f); |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3179 Screen *screen = FRAME_X_SCREEN (f); |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3180 int rc; |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3181 |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3182 gamma_correct (f, color); |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3183 rc = XAllocColor (display, cmap, color); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3184 if (rc == 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3185 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3186 /* If we got to this point, the colormap is full, so we're going |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3187 to try to get the next closest color. The algorithm used is |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3188 a least-squares matching, which is what X uses for closest |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3189 color matching with StaticColor visuals. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3190 int nearest, i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3191 unsigned long nearest_delta = ~0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3192 int ncells = XDisplayCells (display, XScreenNumberOfScreen (screen)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3193 XColor *cells = (XColor *) alloca (ncells * sizeof *cells); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3194 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3195 for (i = 0; i < ncells; ++i) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3196 cells[i].pixel = i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3197 XQueryColors (display, cmap, cells, ncells); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3198 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3199 for (nearest = i = 0; i < ncells; ++i) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3200 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3201 long dred = (color->red >> 8) - (cells[i].red >> 8); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3202 long dgreen = (color->green >> 8) - (cells[i].green >> 8); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3203 long dblue = (color->blue >> 8) - (cells[i].blue >> 8); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3204 unsigned long delta = dred * dred + dgreen * dgreen + dblue * dblue; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3205 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3206 if (delta < nearest_delta) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3207 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3208 nearest = i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3209 nearest_delta = delta; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3210 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3211 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3212 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3213 color->red = cells[nearest].red; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3214 color->green = cells[nearest].green; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3215 color->blue = cells[nearest].blue; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3216 rc = XAllocColor (display, cmap, color); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3217 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3218 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3219 return rc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3220 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3221 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3222 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3223 /* Allocate a color which is lighter or darker than *PIXEL by FACTOR |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3224 or DELTA. Try a color with RGB values multiplied by FACTOR first. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3225 If this produces the same color as PIXEL, try a color where all RGB |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3226 values have DELTA added. Return the allocated color in *PIXEL. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3227 DISPLAY is the X display, CMAP is the colormap to operate on. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3228 Value is non-zero if successful. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3229 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3230 static int |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3231 x_alloc_lighter_color (f, display, cmap, pixel, factor, delta) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3232 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3233 Display *display; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3234 Colormap cmap; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3235 unsigned long *pixel; |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25921
diff
changeset
|
3236 double factor; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3237 int delta; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3238 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3239 XColor color, new; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3240 int success_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3241 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3242 /* Get RGB color values. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3243 color.pixel = *pixel; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3244 XQueryColor (display, cmap, &color); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3245 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3246 /* Change RGB values by specified FACTOR. Avoid overflow! */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3247 xassert (factor >= 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3248 new.red = min (0xffff, factor * color.red); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3249 new.green = min (0xffff, factor * color.green); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3250 new.blue = min (0xffff, factor * color.blue); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3251 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3252 /* Try to allocate the color. */ |
25529
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3253 success_p = x_alloc_nearest_color (f, cmap, &new); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3254 if (success_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3255 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3256 if (new.pixel == *pixel) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3257 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3258 /* If we end up with the same color as before, try adding |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3259 delta to the RGB values. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3260 int class = FRAME_X_DISPLAY_INFO (f)->visual->class; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3261 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3262 /* If display has an immutable color map, freeing colors is |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3263 not necessary and some servers don't allow it. So don't |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3264 do it. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3265 if (class != StaticColor |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3266 && class != StaticGray |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3267 && class != TrueColor) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3268 XFreeColors (display, cmap, &new.pixel, 1, 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3269 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3270 new.red = min (0xffff, delta + color.red); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3271 new.green = min (0xffff, delta + color.green); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3272 new.blue = min (0xffff, delta + color.blue); |
25529
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3273 success_p = x_alloc_nearest_color (f, cmap, &new); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3274 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3275 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3276 success_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3277 *pixel = new.pixel; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3278 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3279 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3280 return success_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3281 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3282 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3283 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3284 /* Set up the foreground color for drawing relief lines of glyph |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3285 string S. RELIEF is a pointer to a struct relief containing the GC |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3286 with which lines will be drawn. Use a color that is FACTOR or |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3287 DELTA lighter or darker than the relief's background which is found |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3288 in S->f->output_data.x->relief_background. If such a color cannot |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3289 be allocated, use DEFAULT_PIXEL, instead. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3290 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3291 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3292 x_setup_relief_color (f, relief, factor, delta, default_pixel) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3293 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3294 struct relief *relief; |
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25921
diff
changeset
|
3295 double factor; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3296 int delta; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3297 unsigned long default_pixel; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3298 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3299 XGCValues xgcv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3300 struct x_output *di = f->output_data.x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3301 unsigned long mask = GCForeground | GCLineWidth | GCGraphicsExposures; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3302 unsigned long pixel; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3303 unsigned long background = di->relief_background; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3304 Colormap cmap = DefaultColormapOfScreen (FRAME_X_SCREEN (f)); |
25091
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
3305 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
3306 Display *dpy = FRAME_X_DISPLAY (f); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3307 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3308 xgcv.graphics_exposures = False; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3309 xgcv.line_width = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3310 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3311 /* Free previously allocated color. The color cell will be reused |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3312 when it has been freed as many times as it was allocated, so this |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3313 doesn't affect faces using the same colors. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3314 if (relief->gc |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3315 && relief->allocated_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3316 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3317 /* If display has an immutable color map, freeing colors is not |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3318 necessary and some servers don't allow it. So don't do it. */ |
25091
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
3319 int class = dpyinfo->visual->class; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3320 if (class != StaticColor |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3321 && class != StaticGray |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3322 && class != TrueColor) |
25091
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
3323 XFreeColors (dpy, cmap, &relief->pixel, 1, 0); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3324 relief->allocated_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3325 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3326 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3327 /* Allocate new color. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3328 xgcv.foreground = default_pixel; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3329 pixel = background; |
25091
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
3330 if (dpyinfo->n_planes != 1 |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
3331 && x_alloc_lighter_color (f, dpy, cmap, &pixel, factor, delta)) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3332 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3333 relief->allocated_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3334 xgcv.foreground = relief->pixel = pixel; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3335 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3336 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3337 if (relief->gc == 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3338 { |
25091
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
3339 xgcv.stipple = dpyinfo->gray; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3340 mask |= GCStipple; |
25091
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
3341 relief->gc = XCreateGC (dpy, FRAME_X_WINDOW (f), mask, &xgcv); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3342 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3343 else |
25091
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
3344 XChangeGC (dpy, relief->gc, mask, &xgcv); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3345 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3346 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3347 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3348 /* Set up colors for the relief lines around glyph string S. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3349 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3350 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3351 x_setup_relief_colors (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3352 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3353 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3354 struct x_output *di = s->f->output_data.x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3355 unsigned long color; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3356 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3357 if (s->face->use_box_color_for_shadows_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3358 color = s->face->box_color; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3359 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3360 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3361 XGCValues xgcv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3362 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3363 /* Get the background color of the face. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3364 XGetGCValues (s->display, s->gc, GCBackground, &xgcv); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3365 color = xgcv.background; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3366 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3367 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3368 if (di->white_relief.gc == 0 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3369 || color != di->relief_background) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3370 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3371 di->relief_background = color; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3372 x_setup_relief_color (s->f, &di->white_relief, 1.2, 0x8000, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3373 WHITE_PIX_DEFAULT (s->f)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3374 x_setup_relief_color (s->f, &di->black_relief, 0.6, 0x4000, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3375 BLACK_PIX_DEFAULT (s->f)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3376 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3377 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3378 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3379 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3380 /* Draw a relief on frame F inside the rectangle given by LEFT_X, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3381 TOP_Y, RIGHT_X, and BOTTOM_Y. WIDTH is the thickness of the relief |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3382 to draw, it must be >= 0. RAISED_P non-zero means draw a raised |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3383 relief. LEFT_P non-zero means draw a relief on the left side of |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3384 the rectangle. RIGHT_P non-zero means draw a relief on the right |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3385 side of the rectangle. CLIP_RECT is the clipping rectangle to use |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3386 when drawing. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3387 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3388 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3389 x_draw_relief_rect (f, left_x, top_y, right_x, bottom_y, width, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3390 raised_p, left_p, right_p, clip_rect) |
771 | 3391 struct frame *f; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3392 int left_x, top_y, right_x, bottom_y, left_p, right_p, raised_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3393 XRectangle *clip_rect; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3394 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3395 int i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3396 GC gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3397 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3398 if (raised_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3399 gc = f->output_data.x->white_relief.gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3400 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3401 gc = f->output_data.x->black_relief.gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3402 XSetClipRectangles (FRAME_X_DISPLAY (f), gc, 0, 0, clip_rect, 1, Unsorted); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3403 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3404 /* Top. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3405 for (i = 0; i < width; ++i) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3406 XDrawLine (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3407 left_x + i * left_p, top_y + i, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3408 right_x + 1 - i * right_p, top_y + i); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3409 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3410 /* Left. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3411 if (left_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3412 for (i = 0; i < width; ++i) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3413 XDrawLine (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3414 left_x + i, top_y + i, left_x + i, bottom_y - i); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3415 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3416 XSetClipMask (FRAME_X_DISPLAY (f), gc, None); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3417 if (raised_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3418 gc = f->output_data.x->black_relief.gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3419 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3420 gc = f->output_data.x->white_relief.gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3421 XSetClipRectangles (FRAME_X_DISPLAY (f), gc, 0, 0, clip_rect, 1, Unsorted); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3422 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3423 /* Bottom. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3424 for (i = 0; i < width; ++i) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3425 XDrawLine (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3426 left_x + i * left_p, bottom_y - i, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3427 right_x + 1 - i * right_p, bottom_y - i); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3428 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3429 /* Right. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3430 if (right_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3431 for (i = 0; i < width; ++i) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3432 XDrawLine (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3433 right_x - i, top_y + i + 1, right_x - i, bottom_y - i); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3434 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3435 XSetClipMask (FRAME_X_DISPLAY (f), gc, None); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3436 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3437 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3438 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3439 /* Draw a box on frame F inside the rectangle given by LEFT_X, TOP_Y, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3440 RIGHT_X, and BOTTOM_Y. WIDTH is the thickness of the lines to |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3441 draw, it must be >= 0. LEFT_P non-zero means draw a line on the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3442 left side of the rectangle. RIGHT_P non-zero means draw a line |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3443 on the right side of the rectangle. CLIP_RECT is the clipping |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3444 rectangle to use when drawing. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3445 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3446 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3447 x_draw_box_rect (s, left_x, top_y, right_x, bottom_y, width, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3448 left_p, right_p, clip_rect) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3449 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3450 int left_x, top_y, right_x, bottom_y, left_p, right_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3451 XRectangle *clip_rect; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3452 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3453 XGCValues xgcv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3454 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3455 XGetGCValues (s->display, s->gc, GCForeground, &xgcv); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3456 XSetForeground (s->display, s->gc, s->face->box_color); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3457 XSetClipRectangles (s->display, s->gc, 0, 0, clip_rect, 1, Unsorted); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3458 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3459 /* Top. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3460 XFillRectangle (s->display, s->window, s->gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3461 left_x, top_y, right_x - left_x, width); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3462 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3463 /* Left. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3464 if (left_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3465 XFillRectangle (s->display, s->window, s->gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3466 left_x, top_y, width, bottom_y - top_y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3467 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3468 /* Bottom. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3469 XFillRectangle (s->display, s->window, s->gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3470 left_x, bottom_y - width, right_x - left_x, width); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3471 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3472 /* Right. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3473 if (right_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3474 XFillRectangle (s->display, s->window, s->gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3475 right_x - width, top_y, width, bottom_y - top_y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3476 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3477 XSetForeground (s->display, s->gc, xgcv.foreground); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3478 XSetClipMask (s->display, s->gc, None); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3479 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3480 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3481 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3482 /* Draw a box around glyph string S. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3483 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3484 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3485 x_draw_glyph_string_box (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3486 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3487 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3488 int width, left_x, right_x, top_y, bottom_y, last_x, raised_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3489 int left_p, right_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3490 struct glyph *last_glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3491 XRectangle clip_rect; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3492 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3493 last_x = window_box_right (s->w, s->area); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3494 if (s->row->full_width_p |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3495 && !s->w->pseudo_window_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3496 { |
25465 | 3497 last_x += FRAME_X_RIGHT_FLAGS_AREA_WIDTH (s->f); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3498 if (FRAME_HAS_VERTICAL_SCROLL_BARS_ON_RIGHT (s->f)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3499 last_x += FRAME_SCROLL_BAR_WIDTH (s->f) * CANON_X_UNIT (s->f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3500 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3501 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3502 /* The glyph that may have a right box line. */ |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3503 last_glyph = (s->cmp || s->img |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3504 ? s->first_glyph |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3505 : s->first_glyph + s->nchars - 1); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3506 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3507 width = s->face->box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3508 raised_p = s->face->box == FACE_RAISED_BOX; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3509 left_x = s->x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3510 right_x = ((s->row->full_width_p |
25079
3a09aae52441
(x_get_glyph_string_clip_rect): Take internal border
Gerd Moellmann <gerd@gnu.org>
parents:
25068
diff
changeset
|
3511 ? last_x - 1 |
25302
0f10c1eaf8fb
(x_draw_glyph_string_box): Use the background width
Gerd Moellmann <gerd@gnu.org>
parents:
25269
diff
changeset
|
3512 : min (last_x, s->x + s->background_width) - 1)); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3513 top_y = s->y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3514 bottom_y = top_y + s->height - 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3515 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3516 left_p = (s->first_glyph->left_box_line_p |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3517 || (s->hl == DRAW_MOUSE_FACE |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3518 && (s->prev == NULL |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3519 || s->prev->hl != s->hl))); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3520 right_p = (last_glyph->right_box_line_p |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3521 || (s->hl == DRAW_MOUSE_FACE |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3522 && (s->next == NULL |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3523 || s->next->hl != s->hl))); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3524 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3525 x_get_glyph_string_clip_rect (s, &clip_rect); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3526 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3527 if (s->face->box == FACE_SIMPLE_BOX) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3528 x_draw_box_rect (s, left_x, top_y, right_x, bottom_y, width, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3529 left_p, right_p, &clip_rect); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3530 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3531 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3532 x_setup_relief_colors (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3533 x_draw_relief_rect (s->f, left_x, top_y, right_x, bottom_y, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3534 width, raised_p, left_p, right_p, &clip_rect); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3535 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3536 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3537 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3538 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3539 /* Draw foreground of image glyph string S. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3540 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3541 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3542 x_draw_image_foreground (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3543 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3544 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3545 int x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3546 int y = s->ybase - IMAGE_ASCENT (s->img); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3547 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3548 /* If first glyph of S has a left box line, start drawing it to the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3549 right of that line. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3550 if (s->face->box != FACE_NO_BOX |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3551 && s->first_glyph->left_box_line_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3552 x = s->x + s->face->box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3553 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3554 x = s->x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3555 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3556 /* If there is a margin around the image, adjust x- and y-position |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3557 by that margin. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3558 if (s->img->margin) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3559 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3560 x += s->img->margin; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3561 y += s->img->margin; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3562 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3563 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3564 if (s->img->pixmap) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3565 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3566 if (s->img->mask) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3567 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3568 /* We can't set both a clip mask and use XSetClipRectangles |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3569 because the latter also sets a clip mask. We also can't |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3570 trust on the shape extension to be available |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3571 (XShapeCombineRegion). So, compute the rectangle to draw |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3572 manually. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3573 unsigned long mask = (GCClipMask | GCClipXOrigin | GCClipYOrigin |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3574 | GCFunction); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3575 XGCValues xgcv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3576 XRectangle clip_rect, image_rect, r; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3577 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3578 xgcv.clip_mask = s->img->mask; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3579 xgcv.clip_x_origin = x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3580 xgcv.clip_y_origin = y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3581 xgcv.function = GXcopy; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3582 XChangeGC (s->display, s->gc, mask, &xgcv); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3583 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3584 x_get_glyph_string_clip_rect (s, &clip_rect); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3585 image_rect.x = x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3586 image_rect.y = y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3587 image_rect.width = s->img->width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3588 image_rect.height = s->img->height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3589 if (x_intersect_rectangles (&clip_rect, &image_rect, &r)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3590 XCopyArea (s->display, s->img->pixmap, s->window, s->gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3591 r.x - x, r.y - y, r.width, r.height, r.x, r.y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3592 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3593 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3594 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3595 XCopyArea (s->display, s->img->pixmap, s->window, s->gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3596 0, 0, s->img->width, s->img->height, x, y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3597 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3598 /* When the image has a mask, we can expect that at |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3599 least part of a mouse highlight or a block cursor will |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3600 be visible. If the image doesn't have a mask, make |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3601 a block cursor visible by drawing a rectangle around |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3602 the image. I believe it's looking better if we do |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3603 nothing here for mouse-face. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3604 if (s->hl == DRAW_CURSOR) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3605 XDrawRectangle (s->display, s->window, s->gc, x, y, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3606 s->img->width - 1, s->img->height - 1); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3607 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3608 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3609 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3610 /* Draw a rectangle if image could not be loaded. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3611 XDrawRectangle (s->display, s->window, s->gc, x, y, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3612 s->img->width - 1, s->img->height - 1); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3613 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3614 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3615 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3616 /* Draw a relief around the image glyph string S. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3617 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3618 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3619 x_draw_image_relief (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3620 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3621 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3622 int x0, y0, x1, y1, thick, raised_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3623 XRectangle r; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3624 int x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3625 int y = s->ybase - IMAGE_ASCENT (s->img); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3626 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3627 /* If first glyph of S has a left box line, start drawing it to the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3628 right of that line. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3629 if (s->face->box != FACE_NO_BOX |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3630 && s->first_glyph->left_box_line_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3631 x = s->x + s->face->box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3632 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3633 x = s->x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3634 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3635 /* If there is a margin around the image, adjust x- and y-position |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3636 by that margin. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3637 if (s->img->margin) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3638 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3639 x += s->img->margin; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3640 y += s->img->margin; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3641 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3642 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3643 if (s->hl == DRAW_IMAGE_SUNKEN |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3644 || s->hl == DRAW_IMAGE_RAISED) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3645 { |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
3646 thick = tool_bar_button_relief > 0 ? tool_bar_button_relief : 3; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3647 raised_p = s->hl == DRAW_IMAGE_RAISED; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3648 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3649 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3650 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3651 thick = abs (s->img->relief); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3652 raised_p = s->img->relief > 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3653 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3654 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3655 x0 = x - thick; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3656 y0 = y - thick; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3657 x1 = x + s->img->width + thick - 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3658 y1 = y + s->img->height + thick - 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3659 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3660 x_setup_relief_colors (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3661 x_get_glyph_string_clip_rect (s, &r); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3662 x_draw_relief_rect (s->f, x0, y0, x1, y1, thick, raised_p, 1, 1, &r); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3663 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3664 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3665 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3666 /* Draw the foreground of image glyph string S to PIXMAP. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3667 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3668 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3669 x_draw_image_foreground_1 (s, pixmap) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3670 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3671 Pixmap pixmap; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3672 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3673 int x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3674 int y = s->ybase - s->y - IMAGE_ASCENT (s->img); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3675 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3676 /* If first glyph of S has a left box line, start drawing it to the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3677 right of that line. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3678 if (s->face->box != FACE_NO_BOX |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3679 && s->first_glyph->left_box_line_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3680 x = s->face->box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3681 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3682 x = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3683 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3684 /* If there is a margin around the image, adjust x- and y-position |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3685 by that margin. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3686 if (s->img->margin) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3687 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3688 x += s->img->margin; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3689 y += s->img->margin; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3690 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3691 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3692 if (s->img->pixmap) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3693 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3694 if (s->img->mask) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3695 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3696 /* We can't set both a clip mask and use XSetClipRectangles |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3697 because the latter also sets a clip mask. We also can't |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3698 trust on the shape extension to be available |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3699 (XShapeCombineRegion). So, compute the rectangle to draw |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3700 manually. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3701 unsigned long mask = (GCClipMask | GCClipXOrigin | GCClipYOrigin |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3702 | GCFunction); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3703 XGCValues xgcv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3704 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3705 xgcv.clip_mask = s->img->mask; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3706 xgcv.clip_x_origin = x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3707 xgcv.clip_y_origin = y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3708 xgcv.function = GXcopy; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3709 XChangeGC (s->display, s->gc, mask, &xgcv); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3710 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3711 XCopyArea (s->display, s->img->pixmap, pixmap, s->gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3712 0, 0, s->img->width, s->img->height, x, y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3713 XSetClipMask (s->display, s->gc, None); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3714 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3715 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3716 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3717 XCopyArea (s->display, s->img->pixmap, pixmap, s->gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3718 0, 0, s->img->width, s->img->height, x, y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3719 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3720 /* When the image has a mask, we can expect that at |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3721 least part of a mouse highlight or a block cursor will |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3722 be visible. If the image doesn't have a mask, make |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3723 a block cursor visible by drawing a rectangle around |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3724 the image. I believe it's looking better if we do |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3725 nothing here for mouse-face. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3726 if (s->hl == DRAW_CURSOR) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3727 XDrawRectangle (s->display, pixmap, s->gc, x, y, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3728 s->img->width - 1, s->img->height - 1); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3729 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3730 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3731 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3732 /* Draw a rectangle if image could not be loaded. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3733 XDrawRectangle (s->display, pixmap, s->gc, x, y, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3734 s->img->width - 1, s->img->height - 1); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3735 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3736 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3737 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3738 /* Draw part of the background of glyph string S. X, Y, W, and H |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3739 give the rectangle to draw. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3740 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3741 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3742 x_draw_glyph_string_bg_rect (s, x, y, w, h) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3743 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3744 int x, y, w, h; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3745 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3746 if (s->stippled_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3747 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3748 /* Fill background with a stipple pattern. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3749 XSetFillStyle (s->display, s->gc, FillOpaqueStippled); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3750 XFillRectangle (s->display, s->window, s->gc, x, y, w, h); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3751 XSetFillStyle (s->display, s->gc, FillSolid); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3752 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3753 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3754 x_clear_glyph_string_rect (s, x, y, w, h); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3755 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3756 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3757 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3758 /* Draw image glyph string S. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3759 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3760 s->y |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3761 s->x +------------------------- |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3762 | s->face->box |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3763 | |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3764 | +------------------------- |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3765 | | s->img->margin |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3766 | | |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3767 | | +------------------- |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3768 | | | the image |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3769 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3770 */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3771 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3772 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3773 x_draw_image_glyph_string (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3774 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3775 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3776 int x, y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3777 int box_line_width = s->face->box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3778 int margin = s->img->margin; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3779 int height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3780 Pixmap pixmap = None; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3781 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3782 height = s->height - 2 * box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3783 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3784 /* Fill background with face under the image. Do it only if row is |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3785 taller than image or if image has a clip mask to reduce |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3786 flickering. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3787 s->stippled_p = s->face->stipple != 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3788 if (height > s->img->height |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3789 || margin |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3790 || s->img->mask |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3791 || s->img->pixmap == 0 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3792 || s->width != s->background_width) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3793 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3794 if (box_line_width && s->first_glyph->left_box_line_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3795 x = s->x + box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3796 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3797 x = s->x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3798 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3799 y = s->y + box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3800 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3801 if (s->img->mask) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3802 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3803 /* Create a pixmap as large as the glyph string Fill it with |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3804 the background color. Copy the image to it, using its |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3805 mask. Copy the temporary pixmap to the display. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3806 Screen *screen = FRAME_X_SCREEN (s->f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3807 int depth = DefaultDepthOfScreen (screen); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3808 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3809 /* Create a pixmap as large as the glyph string. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3810 pixmap = XCreatePixmap (s->display, s->window, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3811 s->background_width, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3812 s->height, depth); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3813 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3814 /* Don't clip in the following because we're working on the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3815 pixmap. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3816 XSetClipMask (s->display, s->gc, None); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3817 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3818 /* Fill the pixmap with the background color/stipple. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3819 if (s->stippled_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3820 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3821 /* Fill background with a stipple pattern. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3822 XSetFillStyle (s->display, s->gc, FillOpaqueStippled); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3823 XFillRectangle (s->display, pixmap, s->gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3824 0, 0, s->background_width, s->height); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3825 XSetFillStyle (s->display, s->gc, FillSolid); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3826 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3827 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3828 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3829 XGCValues xgcv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3830 XGetGCValues (s->display, s->gc, GCForeground | GCBackground, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3831 &xgcv); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3832 XSetForeground (s->display, s->gc, xgcv.background); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3833 XFillRectangle (s->display, pixmap, s->gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3834 0, 0, s->background_width, s->height); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3835 XSetForeground (s->display, s->gc, xgcv.foreground); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3836 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3837 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3838 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3839 /* Implementation idea: Is it possible to construct a mask? |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3840 We could look at the color at the margins of the image, and |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3841 say that this color is probably the background color of the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3842 image. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3843 x_draw_glyph_string_bg_rect (s, x, y, s->background_width, height); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3844 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3845 s->background_filled_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3846 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3847 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3848 /* Draw the foreground. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3849 if (pixmap != None) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3850 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3851 x_draw_image_foreground_1 (s, pixmap); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3852 x_set_glyph_string_clipping (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3853 XCopyArea (s->display, pixmap, s->window, s->gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3854 0, 0, s->background_width, s->height, s->x, s->y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3855 XFreePixmap (s->display, pixmap); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3856 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3857 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3858 x_draw_image_foreground (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3859 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3860 /* If we must draw a relief around the image, do it. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3861 if (s->img->relief |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3862 || s->hl == DRAW_IMAGE_RAISED |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3863 || s->hl == DRAW_IMAGE_SUNKEN) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3864 x_draw_image_relief (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3865 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3866 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3867 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3868 /* Draw stretch glyph string S. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3869 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3870 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3871 x_draw_stretch_glyph_string (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3872 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3873 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3874 xassert (s->first_glyph->type == STRETCH_GLYPH); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3875 s->stippled_p = s->face->stipple != 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3876 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3877 if (s->hl == DRAW_CURSOR |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3878 && !x_stretch_cursor_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3879 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3880 /* If `x-stretch-block-cursor' is nil, don't draw a block cursor |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3881 as wide as the stretch glyph. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3882 int width = min (CANON_X_UNIT (s->f), s->background_width); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3883 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3884 /* Draw cursor. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3885 x_draw_glyph_string_bg_rect (s, s->x, s->y, width, s->height); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3886 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3887 /* Clear rest using the GC of the original non-cursor face. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3888 if (width < s->background_width) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3889 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3890 GC gc = s->face->gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3891 int x = s->x + width, y = s->y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3892 int w = s->background_width - width, h = s->height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3893 XRectangle r; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3894 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3895 x_get_glyph_string_clip_rect (s, &r); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3896 XSetClipRectangles (s->display, gc, 0, 0, &r, 1, Unsorted); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3897 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3898 if (s->face->stipple) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3899 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3900 /* Fill background with a stipple pattern. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3901 XSetFillStyle (s->display, gc, FillOpaqueStippled); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3902 XFillRectangle (s->display, s->window, gc, x, y, w, h); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3903 XSetFillStyle (s->display, gc, FillSolid); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3904 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3905 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3906 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3907 XGCValues xgcv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3908 XGetGCValues (s->display, gc, GCForeground | GCBackground, &xgcv); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3909 XSetForeground (s->display, gc, xgcv.background); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3910 XFillRectangle (s->display, s->window, gc, x, y, w, h); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3911 XSetForeground (s->display, gc, xgcv.foreground); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3912 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3913 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3914 } |
313 | 3915 else |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3916 x_draw_glyph_string_bg_rect (s, s->x, s->y, s->background_width, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3917 s->height); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3918 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3919 s->background_filled_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3920 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3921 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3922 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3923 /* Draw glyph string S. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3924 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3925 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3926 x_draw_glyph_string (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3927 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3928 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3929 /* If S draws into the background of its successor, draw the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3930 background of the successor first so that S can draw into it. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3931 This makes S->next use XDrawString instead of XDrawImageString. */ |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3932 if (s->next && s->right_overhang && !s->for_overlaps_p) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3933 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3934 xassert (s->next->img == NULL); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3935 x_set_glyph_string_gc (s->next); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3936 x_set_glyph_string_clipping (s->next); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3937 x_draw_glyph_string_background (s->next, 1); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3938 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3939 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3940 /* Set up S->gc, set clipping and draw S. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3941 x_set_glyph_string_gc (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3942 x_set_glyph_string_clipping (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3943 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3944 switch (s->first_glyph->type) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3945 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3946 case IMAGE_GLYPH: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3947 x_draw_image_glyph_string (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3948 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3949 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3950 case STRETCH_GLYPH: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3951 x_draw_stretch_glyph_string (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3952 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3953 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3954 case CHAR_GLYPH: |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3955 if (s->for_overlaps_p) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3956 s->background_filled_p = 1; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3957 else |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3958 x_draw_glyph_string_background (s, 0); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3959 x_draw_glyph_string_foreground (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3960 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3961 |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3962 case COMPOSITE_GLYPH: |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3963 if (s->for_overlaps_p || s->gidx > 0) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3964 s->background_filled_p = 1; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3965 else |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3966 x_draw_glyph_string_background (s, 1); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3967 x_draw_composite_glyph_string_foreground (s); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3968 break; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3969 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3970 default: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3971 abort (); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3972 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3973 |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3974 if (!s->for_overlaps_p) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3975 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3976 /* Draw underline. */ |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3977 if (s->face->underline_p) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3978 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3979 unsigned long dy, h; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3980 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3981 if (!XGetFontProperty (s->font, XA_UNDERLINE_THICKNESS, &h)) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3982 h = 1; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3983 if (!XGetFontProperty (s->font, XA_UNDERLINE_POSITION, &dy)) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3984 dy = s->height - h; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3985 |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3986 if (s->face->underline_defaulted_p) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3987 XFillRectangle (s->display, s->window, s->gc, s->x, s->y + dy, |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3988 s->width, h); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3989 else |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3990 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3991 XGCValues xgcv; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3992 XGetGCValues (s->display, s->gc, GCForeground, &xgcv); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3993 XSetForeground (s->display, s->gc, s->face->underline_color); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3994 XFillRectangle (s->display, s->window, s->gc, s->x, s->y + dy, |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3995 s->width, h); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3996 XSetForeground (s->display, s->gc, xgcv.foreground); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3997 } |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3998 } |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3999 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4000 /* Draw overline. */ |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4001 if (s->face->overline_p) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4002 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4003 unsigned long dy = 0, h = 1; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4004 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4005 if (s->face->overline_color_defaulted_p) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4006 XFillRectangle (s->display, s->window, s->gc, s->x, s->y + dy, |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4007 s->width, h); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4008 else |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4009 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4010 XGCValues xgcv; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4011 XGetGCValues (s->display, s->gc, GCForeground, &xgcv); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4012 XSetForeground (s->display, s->gc, s->face->overline_color); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4013 XFillRectangle (s->display, s->window, s->gc, s->x, s->y + dy, |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4014 s->width, h); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4015 XSetForeground (s->display, s->gc, xgcv.foreground); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4016 } |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4017 } |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4018 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4019 /* Draw strike-through. */ |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4020 if (s->face->strike_through_p) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4021 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4022 unsigned long h = 1; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4023 unsigned long dy = (s->height - h) / 2; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4024 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4025 if (s->face->strike_through_color_defaulted_p) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4026 XFillRectangle (s->display, s->window, s->gc, s->x, s->y + dy, |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4027 s->width, h); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4028 else |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4029 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4030 XGCValues xgcv; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4031 XGetGCValues (s->display, s->gc, GCForeground, &xgcv); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4032 XSetForeground (s->display, s->gc, s->face->strike_through_color); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4033 XFillRectangle (s->display, s->window, s->gc, s->x, s->y + dy, |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4034 s->width, h); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4035 XSetForeground (s->display, s->gc, xgcv.foreground); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4036 } |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4037 } |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4038 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4039 /* Draw relief. */ |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4040 if (s->face->box != FACE_NO_BOX) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4041 x_draw_glyph_string_box (s); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4042 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4043 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4044 /* Reset clipping. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4045 XSetClipMask (s->display, s->gc, None); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4046 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4047 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4048 |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4049 static int x_fill_composite_glyph_string P_ ((struct glyph_string *, |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4050 struct face **, int)); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4051 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4052 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4053 /* Load glyph string S with a composition components specified by S->cmp. |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4054 FACES is an array of faces for all components of this composition. |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4055 S->gidx is the index of the first component for S. |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4056 OVERLAPS_P non-zero means S should draw the foreground only, and |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4057 use its lines physical height for clipping. |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4058 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4059 Value is the index of a component not in S. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4060 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4061 static int |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4062 x_fill_composite_glyph_string (s, faces, overlaps_p) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4063 struct glyph_string *s; |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4064 struct face **faces; |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4065 int overlaps_p; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4066 { |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4067 int i; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4068 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4069 xassert (s); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4070 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4071 s->for_overlaps_p = overlaps_p; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4072 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4073 s->face = faces[s->gidx]; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4074 s->font = s->face->font; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4075 s->font_info = FONT_INFO_FROM_ID (s->f, s->face->font_info_id); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4076 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4077 /* For all glyphs of this composition, starting at the offset |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4078 S->gidx, until we reach the end of the definition or encounter a |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4079 glyph that requires the different face, add it to S. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4080 ++s->nchars; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4081 for (i = s->gidx + 1; i < s->cmp->glyph_len && faces[i] == s->face; ++i) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4082 ++s->nchars; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4083 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4084 /* All glyph strings for the same composition has the same width, |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4085 i.e. the width set for the first component of the composition. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4086 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4087 s->width = s->first_glyph->pixel_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4088 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4089 /* If the specified font could not be loaded, use the frame's |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4090 default font, but record the fact that we couldn't load it in |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4091 the glyph string so that we can draw rectangles for the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4092 characters of the glyph string. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4093 if (s->font == NULL) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4094 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4095 s->font_not_found_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4096 s->font = FRAME_FONT (s->f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4097 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4098 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4099 /* Adjust base line for subscript/superscript text. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4100 s->ybase += s->first_glyph->voffset; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4101 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4102 xassert (s->face && s->face->gc); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4103 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4104 /* This glyph string must always be drawn with 16-bit functions. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4105 s->two_byte_p = 1; |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4106 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4107 return s->gidx + s->nchars; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4108 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4109 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4110 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4111 /* Load glyph string S with a sequence characters. |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4112 FACE_ID is the face id of the string. START is the index of the |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4113 first glyph to consider, END is the index of the last + 1. |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4114 OVERLAPS_P non-zero means S should draw the foreground only, and |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4115 use its lines physical height for clipping. |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4116 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4117 Value is the index of the first glyph not in S. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4118 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4119 static int |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4120 x_fill_glyph_string (s, face_id, start, end, overlaps_p) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4121 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4122 int face_id; |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4123 int start, end, overlaps_p; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4124 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4125 struct glyph *glyph, *last; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4126 int voffset; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4127 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4128 xassert (s->f == XFRAME (s->w->frame)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4129 xassert (s->nchars == 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4130 xassert (start >= 0 && end > start); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4131 |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4132 s->for_overlaps_p = overlaps_p, |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4133 glyph = s->row->glyphs[s->area] + start; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4134 last = s->row->glyphs[s->area] + end; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4135 voffset = glyph->voffset; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4136 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4137 while (glyph < last |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4138 && glyph->type == CHAR_GLYPH |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4139 && glyph->voffset == voffset |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4140 /* Same face id implies same charset, nowadays. */ |
27000
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
4141 && glyph->face_id == face_id) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4142 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4143 s->face = x_get_glyph_face_and_encoding (s->f, glyph, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4144 s->char2b + s->nchars); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4145 if (s->char2b[s->nchars].byte2 != 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4146 s->two_byte_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4147 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4148 ++s->nchars; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4149 xassert (s->nchars <= end - start); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4150 s->width += glyph->pixel_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4151 ++glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4152 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4153 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4154 s->font = s->face->font; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4155 s->font_info = FONT_INFO_FROM_ID (s->f, s->face->font_info_id); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4156 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4157 /* If the specified font could not be loaded, use the frame's font, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4158 but record the fact that we couldn't load it in |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4159 S->font_not_found_p so that we can draw rectangles for the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4160 characters of the glyph string. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4161 if (s->font == NULL) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4162 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4163 s->font_not_found_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4164 s->font = FRAME_FONT (s->f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4165 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4166 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4167 /* Adjust base line for subscript/superscript text. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4168 s->ybase += voffset; |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4169 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4170 xassert (s->face && s->face->gc); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4171 return glyph - s->row->glyphs[s->area]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4172 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4173 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4174 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4175 /* Fill glyph string S from image glyph S->first_glyph. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4176 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4177 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4178 x_fill_image_glyph_string (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4179 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4180 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4181 xassert (s->first_glyph->type == IMAGE_GLYPH); |
27000
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
4182 s->img = IMAGE_FROM_ID (s->f, s->first_glyph->u.img_id); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4183 xassert (s->img); |
27000
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
4184 s->face = FACE_FROM_ID (s->f, s->first_glyph->face_id); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4185 s->font = s->face->font; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4186 s->width = s->first_glyph->pixel_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4187 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4188 /* Adjust base line for subscript/superscript text. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4189 s->ybase += s->first_glyph->voffset; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4190 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4191 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4192 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4193 /* Fill glyph string S from stretch glyph S->first_glyph. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4194 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4195 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4196 x_fill_stretch_glyph_string (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4197 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4198 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4199 xassert (s->first_glyph->type == STRETCH_GLYPH); |
27000
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
4200 s->face = FACE_FROM_ID (s->f, s->first_glyph->face_id); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4201 s->font = s->face->font; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4202 s->width = s->first_glyph->pixel_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4203 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4204 /* Adjust base line for subscript/superscript text. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4205 s->ybase += s->first_glyph->voffset; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4206 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4207 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4208 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4209 /* Initialize glyph string S. CHAR2B is a suitably allocated vector |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4210 of XChar2b structures for S; it can't be allocated in |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4211 x_init_glyph_string because it must be allocated via `alloca'. W |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4212 is the window on which S is drawn. ROW and AREA are the glyph row |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4213 and area within the row from which S is constructed. START is the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4214 index of the first glyph structure covered by S. HL is a |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4215 face-override for drawing S. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4216 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4217 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4218 x_init_glyph_string (s, char2b, w, row, area, start, hl) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4219 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4220 XChar2b *char2b; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4221 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4222 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4223 enum glyph_row_area area; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4224 int start; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4225 enum draw_glyphs_face hl; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4226 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4227 bzero (s, sizeof *s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4228 s->w = w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4229 s->f = XFRAME (w->frame); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4230 s->display = FRAME_X_DISPLAY (s->f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4231 s->window = FRAME_X_WINDOW (s->f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4232 s->char2b = char2b; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4233 s->hl = hl; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4234 s->row = row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4235 s->area = area; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4236 s->first_glyph = row->glyphs[area] + start; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4237 s->height = row->height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4238 s->y = WINDOW_TO_FRAME_PIXEL_Y (w, row->y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4239 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
4240 /* Display the internal border below the tool-bar window. */ |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
4241 if (s->w == XWINDOW (s->f->tool_bar_window)) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4242 s->y -= s->f->output_data.x->internal_border_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4243 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4244 s->ybase = s->y + row->ascent; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4245 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4246 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4247 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4248 /* Set background width of glyph string S. START is the index of the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4249 first glyph following S. LAST_X is the right-most x-position + 1 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4250 in the drawing area. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4251 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4252 static INLINE void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4253 x_set_glyph_string_background_width (s, start, last_x) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4254 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4255 int start; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4256 int last_x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4257 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4258 /* If the face of this glyph string has to be drawn to the end of |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4259 the drawing area, set S->extends_to_end_of_line_p. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4260 struct face *default_face = FACE_FROM_ID (s->f, DEFAULT_FACE_ID); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4261 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4262 if (start == s->row->used[s->area] |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4263 && s->hl == DRAW_NORMAL_TEXT |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4264 && ((s->area == TEXT_AREA && s->row->fill_line_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4265 || s->face->background != default_face->background |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4266 || s->face->stipple != default_face->stipple)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4267 s->extends_to_end_of_line_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4268 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4269 /* If S extends its face to the end of the line, set its |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4270 background_width to the distance to the right edge of the drawing |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4271 area. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4272 if (s->extends_to_end_of_line_p) |
25079
3a09aae52441
(x_get_glyph_string_clip_rect): Take internal border
Gerd Moellmann <gerd@gnu.org>
parents:
25068
diff
changeset
|
4273 s->background_width = last_x - s->x + 1; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4274 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4275 s->background_width = s->width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4276 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4277 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4278 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4279 /* Add a glyph string for a stretch glyph to the list of strings |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4280 between HEAD and TAIL. START is the index of the stretch glyph in |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4281 row area AREA of glyph row ROW. END is the index of the last glyph |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4282 in that glyph row area. X is the current output position assigned |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4283 to the new glyph string constructed. HL overrides that face of the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4284 glyph; e.g. it is DRAW_CURSOR if a cursor has to be drawn. LAST_X |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4285 is the right-most x-position of the drawing area. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4286 |
25692
121bd925411f
Don't continue #define args for benefit of old cc.
Dave Love <fx@gnu.org>
parents:
25682
diff
changeset
|
4287 /* SunOS 4 bundled cc, barfed on continuations in the arg lists here |
121bd925411f
Don't continue #define args for benefit of old cc.
Dave Love <fx@gnu.org>
parents:
25682
diff
changeset
|
4288 and below -- keep them on one line. */ |
121bd925411f
Don't continue #define args for benefit of old cc.
Dave Love <fx@gnu.org>
parents:
25682
diff
changeset
|
4289 #define BUILD_STRETCH_GLYPH_STRING(W, ROW, AREA, START, END, HEAD, TAIL, HL, X, LAST_X) \ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4290 do \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4291 { \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4292 s = (struct glyph_string *) alloca (sizeof *s); \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4293 x_init_glyph_string (s, NULL, W, ROW, AREA, START, HL); \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4294 x_fill_stretch_glyph_string (s); \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4295 x_append_glyph_string (&HEAD, &TAIL, s); \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4296 ++START; \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4297 s->x = (X); \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4298 } \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4299 while (0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4300 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4301 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4302 /* Add a glyph string for an image glyph to the list of strings |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4303 between HEAD and TAIL. START is the index of the image glyph in |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4304 row area AREA of glyph row ROW. END is the index of the last glyph |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4305 in that glyph row area. X is the current output position assigned |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4306 to the new glyph string constructed. HL overrides that face of the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4307 glyph; e.g. it is DRAW_CURSOR if a cursor has to be drawn. LAST_X |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4308 is the right-most x-position of the drawing area. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4309 |
25692
121bd925411f
Don't continue #define args for benefit of old cc.
Dave Love <fx@gnu.org>
parents:
25682
diff
changeset
|
4310 #define BUILD_IMAGE_GLYPH_STRING(W, ROW, AREA, START, END, HEAD, TAIL, HL, X, LAST_X) \ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4311 do \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4312 { \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4313 s = (struct glyph_string *) alloca (sizeof *s); \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4314 x_init_glyph_string (s, NULL, W, ROW, AREA, START, HL); \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4315 x_fill_image_glyph_string (s); \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4316 x_append_glyph_string (&HEAD, &TAIL, s); \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4317 ++START; \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4318 s->x = (X); \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4319 } \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4320 while (0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4321 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4322 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4323 /* Add a glyph string for a sequence of character glyphs to the list |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4324 of strings between HEAD and TAIL. START is the index of the first |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4325 glyph in row area AREA of glyph row ROW that is part of the new |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4326 glyph string. END is the index of the last glyph in that glyph row |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4327 area. X is the current output position assigned to the new glyph |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4328 string constructed. HL overrides that face of the glyph; e.g. it |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4329 is DRAW_CURSOR if a cursor has to be drawn. LAST_X is the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4330 right-most x-position of the drawing area. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4331 |
25692
121bd925411f
Don't continue #define args for benefit of old cc.
Dave Love <fx@gnu.org>
parents:
25682
diff
changeset
|
4332 #define BUILD_CHAR_GLYPH_STRINGS(W, ROW, AREA, START, END, HEAD, TAIL, HL, X, LAST_X, OVERLAPS_P) \ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4333 do \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4334 { \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4335 int c, charset, face_id; \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4336 XChar2b *char2b; \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4337 \ |
27000
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
4338 c = (ROW)->glyphs[AREA][START].u.ch; \ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4339 charset = CHAR_CHARSET (c); \ |
27000
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
4340 face_id = (ROW)->glyphs[AREA][START].face_id; \ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4341 \ |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4342 s = (struct glyph_string *) alloca (sizeof *s); \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4343 char2b = (XChar2b *) alloca ((END - START) * sizeof *char2b); \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4344 x_init_glyph_string (s, char2b, W, ROW, AREA, START, HL); \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4345 x_append_glyph_string (&HEAD, &TAIL, s); \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4346 s->charset = charset; \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4347 s->x = (X); \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4348 START = x_fill_glyph_string (s, face_id, START, END, \ |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4349 OVERLAPS_P); \ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4350 } \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4351 while (0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4352 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4353 |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4354 /* Add a glyph string for a composite sequence to the list of strings |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4355 between HEAD and TAIL. START is the index of the first glyph in |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4356 row area AREA of glyph row ROW that is part of the new glyph |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4357 string. END is the index of the last glyph in that glyph row area. |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4358 X is the current output position assigned to the new glyph string |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4359 constructed. HL overrides that face of the glyph; e.g. it is |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4360 DRAW_CURSOR if a cursor has to be drawn. LAST_X is the right-most |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4361 x-position of the drawing area. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4362 |
26912
3470e4fea708
(BUILD_GLYPH_STRINGS): For pcc, remove continuation in arg list.
Dave Love <fx@gnu.org>
parents:
26879
diff
changeset
|
4363 #define BUILD_COMPOSITE_GLYPH_STRING(W, ROW, AREA, START, END, HEAD, TAIL, HL, X, LAST_X, OVERLAPS_P) \ |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4364 do { \ |
27000
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
4365 int cmp_id = (ROW)->glyphs[AREA][START].u.cmp_id; \ |
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
4366 int face_id = (ROW)->glyphs[AREA][START].face_id; \ |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4367 struct composition *cmp = composition_table[cmp_id]; \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4368 int glyph_len = cmp->glyph_len; \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4369 XChar2b *char2b; \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4370 struct face **faces; \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4371 struct glyph_string *first_s = NULL; \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4372 int n; \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4373 \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4374 char2b = (XChar2b *) alloca ((sizeof *char2b) * glyph_len); \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4375 faces = (struct face **) alloca ((sizeof *faces) * glyph_len); \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4376 /* At first, fill in `char2b' and `faces'. */ \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4377 for (n = 0; n < glyph_len; n++) \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4378 { \ |
27000
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
4379 int c = COMPOSITION_GLYPH (cmp, n); \ |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4380 faces[n] = x_get_char_face_and_encoding (XFRAME (w->frame), c, \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4381 face_id, char2b + n, 1); \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4382 } \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4383 \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4384 /* Make glyph_strings for each glyph sequence that is drawable by \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4385 the same face, and append them to HEAD/TAIL. */ \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4386 for (n = 0; n < cmp->glyph_len;) \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4387 { \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4388 s = (struct glyph_string *) alloca (sizeof *s); \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4389 x_init_glyph_string (s, char2b + n, W, ROW, AREA, START, HL); \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4390 x_append_glyph_string (&(HEAD), &(TAIL), s); \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4391 s->cmp = cmp; \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4392 s->gidx = n; \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4393 s->charset = 0; \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4394 s->x = (X); \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4395 \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4396 if (n == 0) \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4397 first_s = s; \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4398 \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4399 n = x_fill_composite_glyph_string (s, faces, OVERLAPS_P); \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4400 } \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4401 \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4402 ++START; \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4403 s = first_s; \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4404 } while (0) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4405 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4406 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4407 /* Build a list of glyph strings between HEAD and TAIL for the glyphs |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4408 of AREA of glyph row ROW on window W between indices START and END. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4409 HL overrides the face for drawing glyph strings, e.g. it is |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4410 DRAW_CURSOR to draw a cursor. X and LAST_X are start and end |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4411 x-positions of the drawing area. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4412 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4413 This is an ugly monster macro construct because we must use alloca |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4414 to allocate glyph strings (because x_draw_glyphs can be called |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4415 asynchronously). */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4416 |
25692
121bd925411f
Don't continue #define args for benefit of old cc.
Dave Love <fx@gnu.org>
parents:
25682
diff
changeset
|
4417 #define BUILD_GLYPH_STRINGS(W, ROW, AREA, START, END, HEAD, TAIL, HL, X, LAST_X, OVERLAPS_P) \ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4418 do \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4419 { \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4420 HEAD = TAIL = NULL; \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4421 while (START < END) \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4422 { \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4423 struct glyph *first_glyph = (ROW)->glyphs[AREA] + START; \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4424 switch (first_glyph->type) \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4425 { \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4426 case CHAR_GLYPH: \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4427 BUILD_CHAR_GLYPH_STRINGS (W, ROW, AREA, START, END, HEAD, \ |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4428 TAIL, HL, X, LAST_X, \ |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4429 OVERLAPS_P); \ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4430 break; \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4431 \ |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4432 case COMPOSITE_GLYPH: \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4433 BUILD_COMPOSITE_GLYPH_STRING (W, ROW, AREA, START, END, \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4434 HEAD, TAIL, HL, X, LAST_X,\ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4435 OVERLAPS_P); \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4436 break; \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4437 \ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4438 case STRETCH_GLYPH: \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4439 BUILD_STRETCH_GLYPH_STRING (W, ROW, AREA, START, END, \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4440 HEAD, TAIL, HL, X, LAST_X); \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4441 break; \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4442 \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4443 case IMAGE_GLYPH: \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4444 BUILD_IMAGE_GLYPH_STRING (W, ROW, AREA, START, END, HEAD, \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4445 TAIL, HL, X, LAST_X); \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4446 break; \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4447 \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4448 default: \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4449 abort (); \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4450 } \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4451 \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4452 x_set_glyph_string_background_width (s, START, LAST_X); \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4453 (X) += s->width; \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4454 } \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4455 } \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4456 while (0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4457 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4458 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4459 /* Draw glyphs between START and END in AREA of ROW on window W, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4460 starting at x-position X. X is relative to AREA in W. HL is a |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4461 face-override with the following meaning: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4462 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4463 DRAW_NORMAL_TEXT draw normally |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4464 DRAW_CURSOR draw in cursor face |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4465 DRAW_MOUSE_FACE draw in mouse face. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4466 DRAW_INVERSE_VIDEO draw in mode line face |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4467 DRAW_IMAGE_SUNKEN draw an image with a sunken relief around it |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4468 DRAW_IMAGE_RAISED draw an image with a raised relief around it |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4469 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4470 If REAL_START is non-null, return in *REAL_START the real starting |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4471 position for display. This can be different from START in case |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4472 overlapping glyphs must be displayed. If REAL_END is non-null, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4473 return in *REAL_END the real end position for display. This can be |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4474 different from END in case overlapping glyphs must be displayed. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4475 |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4476 If OVERLAPS_P is non-zero, draw only the foreground of characters |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4477 and clip to the physical height of ROW. |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4478 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4479 Value is the x-position reached, relative to AREA of W. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4480 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4481 static int |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4482 x_draw_glyphs (w, x, row, area, start, end, hl, real_start, real_end, |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4483 overlaps_p) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4484 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4485 int x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4486 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4487 enum glyph_row_area area; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4488 int start, end; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4489 enum draw_glyphs_face hl; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4490 int *real_start, *real_end; |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4491 int overlaps_p; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4492 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4493 struct glyph_string *head, *tail; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4494 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4495 int last_x, area_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4496 int x_reached; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4497 int i, j; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4498 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4499 /* Let's rather be paranoid than getting a SEGV. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4500 start = max (0, start); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4501 end = min (end, row->used[area]); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4502 if (real_start) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4503 *real_start = start; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4504 if (real_end) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4505 *real_end = end; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4506 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4507 /* Translate X to frame coordinates. Set last_x to the right |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4508 end of the drawing area. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4509 if (row->full_width_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4510 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4511 /* X is relative to the left edge of W, without scroll bars |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4512 or flag areas. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4513 struct frame *f = XFRAME (w->frame); |
25465 | 4514 /* int width = FRAME_FLAGS_AREA_WIDTH (f); */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4515 int window_left_x = WINDOW_LEFT_MARGIN (w) * CANON_X_UNIT (f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4516 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4517 x += window_left_x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4518 area_width = XFASTINT (w->width) * CANON_X_UNIT (f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4519 last_x = window_left_x + area_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4520 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4521 if (FRAME_HAS_VERTICAL_SCROLL_BARS (f)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4522 { |
25465 | 4523 int width = FRAME_SCROLL_BAR_WIDTH (f) * CANON_X_UNIT (f); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4524 if (FRAME_HAS_VERTICAL_SCROLL_BARS_ON_RIGHT (f)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4525 last_x += width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4526 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4527 x -= width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4528 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4529 |
25083
d3b7d7d2bca8
(x_setup_relief_color): Don't try smart color allocation
Gerd Moellmann <gerd@gnu.org>
parents:
25079
diff
changeset
|
4530 x += FRAME_INTERNAL_BORDER_WIDTH (f); |
d3b7d7d2bca8
(x_setup_relief_color): Don't try smart color allocation
Gerd Moellmann <gerd@gnu.org>
parents:
25079
diff
changeset
|
4531 last_x -= FRAME_INTERNAL_BORDER_WIDTH (f); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4532 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4533 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4534 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4535 x = WINDOW_AREA_TO_FRAME_PIXEL_X (w, area, x); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4536 area_width = window_box_width (w, area); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4537 last_x = WINDOW_AREA_TO_FRAME_PIXEL_X (w, area, area_width); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4538 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4539 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4540 /* Build a doubly-linked list of glyph_string structures between |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4541 head and tail from what we have to draw. Note that the macro |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4542 BUILD_GLYPH_STRINGS will modify its start parameter. That's |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4543 the reason we use a separate variable `i'. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4544 i = start; |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4545 BUILD_GLYPH_STRINGS (w, row, area, i, end, head, tail, hl, x, last_x, |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4546 overlaps_p); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4547 if (tail) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4548 x_reached = tail->x + tail->background_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4549 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4550 x_reached = x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4551 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4552 /* If there are any glyphs with lbearing < 0 or rbearing > width in |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4553 the row, redraw some glyphs in front or following the glyph |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4554 strings built above. */ |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4555 if (!overlaps_p && row->contains_overlapping_glyphs_p) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4556 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4557 int dummy_x = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4558 struct glyph_string *h, *t; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4559 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4560 /* Compute overhangs for all glyph strings. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4561 for (s = head; s; s = s->next) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4562 x_compute_glyph_string_overhangs (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4563 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4564 /* Prepend glyph strings for glyphs in front of the first glyph |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4565 string that are overwritten because of the first glyph |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4566 string's left overhang. The background of all strings |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4567 prepended must be drawn because the first glyph string |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4568 draws over it. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4569 i = x_left_overwritten (head); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4570 if (i >= 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4571 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4572 j = i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4573 BUILD_GLYPH_STRINGS (w, row, area, j, start, h, t, |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4574 DRAW_NORMAL_TEXT, dummy_x, last_x, |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4575 overlaps_p); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4576 start = i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4577 if (real_start) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4578 *real_start = start; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4579 x_compute_overhangs_and_x (t, head->x, 1); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4580 x_prepend_glyph_string_lists (&head, &tail, h, t); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4581 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4582 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4583 /* Prepend glyph strings for glyphs in front of the first glyph |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4584 string that overwrite that glyph string because of their |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4585 right overhang. For these strings, only the foreground must |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4586 be drawn, because it draws over the glyph string at `head'. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4587 The background must not be drawn because this would overwrite |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4588 right overhangs of preceding glyphs for which no glyph |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4589 strings exist. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4590 i = x_left_overwriting (head); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4591 if (i >= 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4592 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4593 BUILD_GLYPH_STRINGS (w, row, area, i, start, h, t, |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4594 DRAW_NORMAL_TEXT, dummy_x, last_x, |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4595 overlaps_p); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4596 for (s = h; s; s = s->next) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4597 s->background_filled_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4598 if (real_start) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4599 *real_start = i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4600 x_compute_overhangs_and_x (t, head->x, 1); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4601 x_prepend_glyph_string_lists (&head, &tail, h, t); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4602 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4603 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4604 /* Append glyphs strings for glyphs following the last glyph |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4605 string tail that are overwritten by tail. The background of |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4606 these strings has to be drawn because tail's foreground draws |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4607 over it. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4608 i = x_right_overwritten (tail); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4609 if (i >= 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4610 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4611 BUILD_GLYPH_STRINGS (w, row, area, end, i, h, t, |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4612 DRAW_NORMAL_TEXT, x, last_x, |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4613 overlaps_p); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4614 x_compute_overhangs_and_x (h, tail->x + tail->width, 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4615 x_append_glyph_string_lists (&head, &tail, h, t); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4616 if (real_end) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4617 *real_end = i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4618 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4619 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4620 /* Append glyph strings for glyphs following the last glyph |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4621 string tail that overwrite tail. The foreground of such |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4622 glyphs has to be drawn because it writes into the background |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4623 of tail. The background must not be drawn because it could |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4624 paint over the foreground of following glyphs. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4625 i = x_right_overwriting (tail); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4626 if (i >= 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4627 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4628 BUILD_GLYPH_STRINGS (w, row, area, end, i, h, t, |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4629 DRAW_NORMAL_TEXT, x, last_x, |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4630 overlaps_p); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4631 for (s = h; s; s = s->next) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4632 s->background_filled_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4633 x_compute_overhangs_and_x (h, tail->x + tail->width, 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4634 x_append_glyph_string_lists (&head, &tail, h, t); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4635 if (real_end) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4636 *real_end = i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4637 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4638 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4639 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4640 /* Draw all strings. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4641 for (s = head; s; s = s->next) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4642 x_draw_glyph_string (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4643 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4644 /* Value is the x-position up to which drawn, relative to AREA of W. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4645 This doesn't include parts drawn because of overhangs. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4646 x_reached = FRAME_TO_WINDOW_PIXEL_X (w, x_reached); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4647 if (!row->full_width_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4648 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4649 if (area > LEFT_MARGIN_AREA) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4650 x_reached -= window_box_width (w, LEFT_MARGIN_AREA); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4651 if (area > TEXT_AREA) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4652 x_reached -= window_box_width (w, TEXT_AREA); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4653 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4654 return x_reached; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4655 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4656 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4657 |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4658 /* Fix the display of area AREA of overlapping row ROW in window W. */ |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4659 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4660 static void |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4661 x_fix_overlapping_area (w, row, area) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4662 struct window *w; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4663 struct glyph_row *row; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4664 enum glyph_row_area area; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4665 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4666 int i, x; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4667 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4668 BLOCK_INPUT; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4669 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4670 if (area == LEFT_MARGIN_AREA) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4671 x = 0; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4672 else if (area == TEXT_AREA) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4673 x = row->x + window_box_width (w, LEFT_MARGIN_AREA); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4674 else |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4675 x = (window_box_width (w, LEFT_MARGIN_AREA) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4676 + window_box_width (w, TEXT_AREA)); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4677 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4678 for (i = 0; i < row->used[area];) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4679 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4680 if (row->glyphs[area][i].overlaps_vertically_p) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4681 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4682 int start = i, start_x = x; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4683 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4684 do |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4685 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4686 x += row->glyphs[area][i].pixel_width; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4687 ++i; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4688 } |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4689 while (i < row->used[area] |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4690 && row->glyphs[area][i].overlaps_vertically_p); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4691 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4692 x_draw_glyphs (w, start_x, row, area, start, i, |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4693 (row->inverse_p |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4694 ? DRAW_INVERSE_VIDEO : DRAW_NORMAL_TEXT), |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4695 NULL, NULL, 1); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4696 } |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4697 else |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4698 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4699 x += row->glyphs[area][i].pixel_width; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4700 ++i; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4701 } |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4702 } |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4703 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4704 UNBLOCK_INPUT; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4705 } |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4706 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4707 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4708 /* Output LEN glyphs starting at START at the nominal cursor position. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4709 Advance the nominal cursor over the text. The global variable |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4710 updated_window contains the window being updated, updated_row is |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4711 the glyph row being updated, and updated_area is the area of that |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4712 row being updated. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4713 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4714 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4715 x_write_glyphs (start, len) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4716 struct glyph *start; |
286 | 4717 int len; |
4718 { | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4719 int x, hpos, real_start, real_end; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4720 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4721 xassert (updated_window && updated_row); |
286 | 4722 BLOCK_INPUT; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4723 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4724 /* Write glyphs. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4725 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4726 hpos = start - updated_row->glyphs[updated_area]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4727 x = x_draw_glyphs (updated_window, output_cursor.x, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4728 updated_row, updated_area, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4729 hpos, hpos + len, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4730 (updated_row->inverse_p |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4731 ? DRAW_INVERSE_VIDEO : DRAW_NORMAL_TEXT), |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4732 &real_start, &real_end, 0); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4733 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4734 /* If we drew over the cursor, note that it is not visible any more. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4735 note_overwritten_text_cursor (updated_window, real_start, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4736 real_end - real_start); |
286 | 4737 |
4738 UNBLOCK_INPUT; | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4739 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4740 /* Advance the output cursor. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4741 output_cursor.hpos += len; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4742 output_cursor.x = x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4743 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4744 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4745 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4746 /* Insert LEN glyphs from START at the nominal cursor position. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4747 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4748 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4749 x_insert_glyphs (start, len) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4750 struct glyph *start; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4751 register int len; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4752 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4753 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4754 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4755 int line_height, shift_by_width, shifted_region_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4756 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4757 struct glyph *glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4758 int frame_x, frame_y, hpos, real_start, real_end; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4759 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4760 xassert (updated_window && updated_row); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4761 BLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4762 w = updated_window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4763 f = XFRAME (WINDOW_FRAME (w)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4764 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4765 /* Get the height of the line we are in. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4766 row = updated_row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4767 line_height = row->height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4768 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4769 /* Get the width of the glyphs to insert. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4770 shift_by_width = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4771 for (glyph = start; glyph < start + len; ++glyph) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4772 shift_by_width += glyph->pixel_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4773 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4774 /* Get the width of the region to shift right. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4775 shifted_region_width = (window_box_width (w, updated_area) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4776 - output_cursor.x |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4777 - shift_by_width); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4778 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4779 /* Shift right. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4780 frame_x = WINDOW_TO_FRAME_PIXEL_X (w, output_cursor.x); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4781 frame_y = WINDOW_TO_FRAME_PIXEL_Y (w, output_cursor.y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4782 XCopyArea (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), FRAME_X_WINDOW (f), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4783 f->output_data.x->normal_gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4784 frame_x, frame_y, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4785 shifted_region_width, line_height, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4786 frame_x + shift_by_width, frame_y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4787 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4788 /* Write the glyphs. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4789 hpos = start - row->glyphs[updated_area]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4790 x_draw_glyphs (w, output_cursor.x, row, updated_area, hpos, hpos + len, |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4791 DRAW_NORMAL_TEXT, &real_start, &real_end, 0); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4792 note_overwritten_text_cursor (w, real_start, real_end - real_start); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4793 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4794 /* Advance the output cursor. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4795 output_cursor.hpos += len; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4796 output_cursor.x += shift_by_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4797 UNBLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4798 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4799 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4800 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4801 /* Delete N glyphs at the nominal cursor position. Not implemented |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4802 for X frames. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4803 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4804 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4805 x_delete_glyphs (n) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4806 register int n; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4807 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4808 abort (); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4809 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4810 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4811 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4812 /* Erase the current text line from the nominal cursor position |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4813 (inclusive) to pixel column TO_X (exclusive). The idea is that |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4814 everything from TO_X onward is already erased. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4815 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4816 TO_X is a pixel position relative to updated_area of |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4817 updated_window. TO_X == -1 means clear to the end of this area. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4818 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4819 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4820 x_clear_end_of_line (to_x) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4821 int to_x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4822 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4823 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4824 struct window *w = updated_window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4825 int max_x, min_y, max_y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4826 int from_x, from_y, to_y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4827 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4828 xassert (updated_window && updated_row); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4829 f = XFRAME (w->frame); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4830 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4831 if (updated_row->full_width_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4832 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4833 max_x = XFASTINT (w->width) * CANON_X_UNIT (f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4834 if (FRAME_HAS_VERTICAL_SCROLL_BARS (f) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4835 && !w->pseudo_window_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4836 max_x += FRAME_SCROLL_BAR_WIDTH (f) * CANON_X_UNIT (f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4837 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4838 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4839 max_x = window_box_width (w, updated_area); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4840 max_y = window_text_bottom_y (w); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4841 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4842 /* TO_X == 0 means don't do anything. TO_X < 0 means clear to end |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4843 of window. For TO_X > 0, truncate to end of drawing area. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4844 if (to_x == 0) |
286 | 4845 return; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4846 else if (to_x < 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4847 to_x = max_x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4848 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4849 to_x = min (to_x, max_x); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4850 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4851 to_y = min (max_y, output_cursor.y + updated_row->height); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4852 |
429 | 4853 /* Notice if the cursor will be cleared by this operation. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4854 if (!updated_row->full_width_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4855 note_overwritten_text_cursor (w, output_cursor.hpos, -1); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4856 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4857 from_x = output_cursor.x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4858 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4859 /* Translate to frame coordinates. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4860 if (updated_row->full_width_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4861 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4862 from_x = WINDOW_TO_FRAME_PIXEL_X (w, from_x); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4863 to_x = WINDOW_TO_FRAME_PIXEL_X (w, to_x); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4864 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4865 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4866 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4867 from_x = WINDOW_AREA_TO_FRAME_PIXEL_X (w, updated_area, from_x); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4868 to_x = WINDOW_AREA_TO_FRAME_PIXEL_X (w, updated_area, to_x); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4869 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4870 |
25546 | 4871 min_y = WINDOW_DISPLAY_HEADER_LINE_HEIGHT (w); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4872 from_y = WINDOW_TO_FRAME_PIXEL_Y (w, max (min_y, output_cursor.y)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4873 to_y = WINDOW_TO_FRAME_PIXEL_Y (w, to_y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4874 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4875 /* Prevent inadvertently clearing to end of the X window. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4876 if (to_x > from_x && to_y > from_y) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4877 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4878 BLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4879 XClearArea (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4880 from_x, from_y, to_x - from_x, to_y - from_y, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4881 False); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4882 UNBLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4883 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4884 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4885 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4886 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4887 /* Clear entire frame. If updating_frame is non-null, clear that |
25682
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
4888 frame. Otherwise clear the selected frame. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4889 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4890 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4891 x_clear_frame () |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4892 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4893 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4894 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4895 if (updating_frame) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4896 f = updating_frame; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4897 else |
25682
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
4898 f = SELECTED_FRAME (); |
771 | 4899 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4900 /* Clearing the frame will erase any cursor, so mark them all as no |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4901 longer visible. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4902 mark_window_cursors_off (XWINDOW (FRAME_ROOT_WINDOW (f))); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4903 output_cursor.hpos = output_cursor.vpos = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4904 output_cursor.x = -1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4905 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4906 /* We don't set the output cursor here because there will always |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4907 follow an explicit cursor_to. */ |
286 | 4908 BLOCK_INPUT; |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
4909 XClearWindow (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f)); |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4910 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
4911 /* We have to clear the scroll bars, too. If we have changed |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4912 colors or something like that, then they should be notified. */ |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
4913 x_scroll_bar_clear (f); |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4914 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
4915 XFlush (FRAME_X_DISPLAY (f)); |
286 | 4916 UNBLOCK_INPUT; |
4917 } | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4918 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4919 |
6791
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
4920 |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4921 /* Invert the middle quarter of the frame for .15 sec. */ |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4922 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4923 /* We use the select system call to do the waiting, so we have to make |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4924 sure it's available. If it isn't, we just won't do visual bells. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4925 |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4926 #if defined (HAVE_TIMEVAL) && defined (HAVE_SELECT) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4927 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4928 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4929 /* Subtract the `struct timeval' values X and Y, storing the result in |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4930 *RESULT. Return 1 if the difference is negative, otherwise 0. */ |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4931 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4932 static int |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4933 timeval_subtract (result, x, y) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4934 struct timeval *result, x, y; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4935 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4936 /* Perform the carry for the later subtraction by updating y. This |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4937 is safer because on some systems the tv_sec member is unsigned. */ |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4938 if (x.tv_usec < y.tv_usec) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4939 { |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4940 int nsec = (y.tv_usec - x.tv_usec) / 1000000 + 1; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4941 y.tv_usec -= 1000000 * nsec; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4942 y.tv_sec += nsec; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4943 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4944 |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4945 if (x.tv_usec - y.tv_usec > 1000000) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4946 { |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4947 int nsec = (y.tv_usec - x.tv_usec) / 1000000; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4948 y.tv_usec += 1000000 * nsec; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4949 y.tv_sec -= nsec; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4950 } |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4951 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4952 /* Compute the time remaining to wait. tv_usec is certainly |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4953 positive. */ |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4954 result->tv_sec = x.tv_sec - y.tv_sec; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4955 result->tv_usec = x.tv_usec - y.tv_usec; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4956 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4957 /* Return indication of whether the result should be considered |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4958 negative. */ |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4959 return x.tv_sec < y.tv_sec; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4960 } |
286 | 4961 |
21514 | 4962 void |
771 | 4963 XTflash (f) |
4964 struct frame *f; | |
286 | 4965 { |
4966 BLOCK_INPUT; | |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4967 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4968 { |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4969 GC gc; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4970 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4971 /* Create a GC that will use the GXxor function to flip foreground |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4972 pixels into background pixels. */ |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4973 { |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4974 XGCValues values; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4975 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4976 values.function = GXxor; |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
4977 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:
12657
diff
changeset
|
4978 ^ f->output_data.x->background_pixel); |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
4979 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
4980 gc = XCreateGC (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4981 GCFunction | GCForeground, &values); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4982 } |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4983 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4984 { |
16352
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4985 /* Get the height not including a menu bar widget. */ |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4986 int height = CHAR_TO_PIXEL_HEIGHT (f, FRAME_HEIGHT (f)); |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4987 /* Height of each line to flash. */ |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4988 int flash_height = FRAME_LINE_HEIGHT (f); |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4989 /* These will be the left and right margins of the rectangles. */ |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4990 int flash_left = FRAME_INTERNAL_BORDER_WIDTH (f); |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4991 int flash_right = PIXEL_WIDTH (f) - FRAME_INTERNAL_BORDER_WIDTH (f); |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4992 |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4993 int width; |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4994 |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4995 /* Don't flash the area between a scroll bar and the frame |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4996 edge it is next to. */ |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4997 switch (FRAME_VERTICAL_SCROLL_BAR_TYPE (f)) |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4998 { |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4999 case vertical_scroll_bar_left: |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5000 flash_left += VERTICAL_SCROLL_BAR_WIDTH_TRIM; |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5001 break; |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5002 |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5003 case vertical_scroll_bar_right: |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5004 flash_right -= VERTICAL_SCROLL_BAR_WIDTH_TRIM; |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5005 break; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5006 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5007 default: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5008 break; |
16352
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5009 } |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5010 |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5011 width = flash_right - flash_left; |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5012 |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5013 /* If window is tall, flash top and bottom line. */ |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5014 if (height > 3 * FRAME_LINE_HEIGHT (f)) |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5015 { |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5016 XFillRectangle (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), gc, |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5017 flash_left, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5018 (FRAME_INTERNAL_BORDER_WIDTH (f) |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
5019 + FRAME_TOOL_BAR_LINES (f) * CANON_Y_UNIT (f)), |
16352
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5020 width, flash_height); |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5021 XFillRectangle (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), gc, |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5022 flash_left, |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5023 (height - flash_height |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5024 - FRAME_INTERNAL_BORDER_WIDTH (f)), |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5025 width, flash_height); |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5026 } |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5027 else |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5028 /* If it is short, flash it all. */ |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5029 XFillRectangle (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), gc, |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5030 flash_left, FRAME_INTERNAL_BORDER_WIDTH (f), |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5031 width, height - 2 * FRAME_INTERNAL_BORDER_WIDTH (f)); |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5032 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5033 x_flush (f); |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5034 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5035 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5036 struct timeval wakeup; |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5037 |
5362
d1fa597d923d
(XTflush): FIx typo in last change.
Richard M. Stallman <rms@gnu.org>
parents:
5357
diff
changeset
|
5038 EMACS_GET_TIME (wakeup); |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5039 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5040 /* Compute time to wait until, propagating carry from usecs. */ |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5041 wakeup.tv_usec += 150000; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5042 wakeup.tv_sec += (wakeup.tv_usec / 1000000); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5043 wakeup.tv_usec %= 1000000; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5044 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5045 /* Keep waiting until past the time wakeup. */ |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5046 while (1) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5047 { |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5048 struct timeval timeout; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5049 |
5362
d1fa597d923d
(XTflush): FIx typo in last change.
Richard M. Stallman <rms@gnu.org>
parents:
5357
diff
changeset
|
5050 EMACS_GET_TIME (timeout); |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5051 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5052 /* In effect, timeout = wakeup - timeout. |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5053 Break if result would be negative. */ |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5054 if (timeval_subtract (&timeout, wakeup, timeout)) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5055 break; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5056 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5057 /* Try to wait that long--but we might wake up sooner. */ |
11915
e2ab839155e1
(XTflash): Use pointers as args to select.
Karl Heuer <kwzh@gnu.org>
parents:
11904
diff
changeset
|
5058 select (0, NULL, NULL, NULL, &timeout); |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5059 } |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5060 } |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
5061 |
16352
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5062 /* If window is tall, flash top and bottom line. */ |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5063 if (height > 3 * FRAME_LINE_HEIGHT (f)) |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5064 { |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5065 XFillRectangle (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), gc, |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5066 flash_left, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5067 (FRAME_INTERNAL_BORDER_WIDTH (f) |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
5068 + FRAME_TOOL_BAR_LINES (f) * CANON_Y_UNIT (f)), |
16352
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5069 width, flash_height); |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5070 XFillRectangle (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), gc, |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5071 flash_left, |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5072 (height - flash_height |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5073 - FRAME_INTERNAL_BORDER_WIDTH (f)), |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5074 width, flash_height); |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5075 } |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5076 else |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5077 /* If it is short, flash it all. */ |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5078 XFillRectangle (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), gc, |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5079 flash_left, FRAME_INTERNAL_BORDER_WIDTH (f), |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5080 width, height - 2 * FRAME_INTERNAL_BORDER_WIDTH (f)); |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5081 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5082 XFreeGC (FRAME_X_DISPLAY (f), gc); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5083 x_flush (f); |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5084 } |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5085 } |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5086 |
286 | 5087 UNBLOCK_INPUT; |
5088 } | |
5089 | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5090 #endif /* defined (HAVE_TIMEVAL) && defined (HAVE_SELECT) */ |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5091 |
286 | 5092 |
5093 /* Make audible bell. */ | |
5094 | |
21514 | 5095 void |
286 | 5096 XTring_bell () |
5097 { | |
25682
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5098 struct frame *f = SELECTED_FRAME (); |
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5099 |
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5100 if (FRAME_X_DISPLAY (f)) |
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5101 { |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5102 #if defined (HAVE_TIMEVAL) && defined (HAVE_SELECT) |
25682
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5103 if (visible_bell) |
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5104 XTflash (f); |
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5105 else |
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5106 #endif |
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5107 { |
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5108 BLOCK_INPUT; |
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5109 XBell (FRAME_X_DISPLAY (f), 0); |
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5110 XFlush (FRAME_X_DISPLAY (f)); |
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5111 UNBLOCK_INPUT; |
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5112 } |
286 | 5113 } |
5114 } | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5115 |
286 | 5116 |
5117 /* Specify how many text lines, from the top of the window, | |
5118 should be affected by insert-lines and delete-lines operations. | |
5119 This, and those operations, are used only within an update | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5120 that is bounded by calls to x_update_begin and x_update_end. */ |
286 | 5121 |
21514 | 5122 static void |
286 | 5123 XTset_terminal_window (n) |
5124 register int n; | |
5125 { | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5126 /* This function intentionally left blank. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5127 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5128 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5129 |
286 | 5130 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5131 /*********************************************************************** |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5132 Line Dance |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5133 ***********************************************************************/ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5134 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5135 /* Perform an insert-lines or delete-lines operation, inserting N |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5136 lines or deleting -N lines at vertical position VPOS. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5137 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5138 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5139 x_ins_del_lines (vpos, n) |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
5140 int vpos, n; |
286 | 5141 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5142 abort (); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5143 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5144 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5145 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5146 /* Scroll part of the display as described by RUN. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5147 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5148 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5149 x_scroll_run (w, run) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5150 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5151 struct run *run; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5152 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5153 struct frame *f = XFRAME (w->frame); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5154 int x, y, width, height, from_y, to_y, bottom_y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5155 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5156 /* Get frame-relative bounding box of the text display area of W, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5157 without mode lines. Include in this box the flags areas to the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5158 left and right of W. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5159 window_box (w, -1, &x, &y, &width, &height); |
25465 | 5160 width += FRAME_X_FLAGS_AREA_WIDTH (f); |
5161 x -= FRAME_X_LEFT_FLAGS_AREA_WIDTH (f); | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5162 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5163 from_y = WINDOW_TO_FRAME_PIXEL_Y (w, run->current_y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5164 to_y = WINDOW_TO_FRAME_PIXEL_Y (w, run->desired_y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5165 bottom_y = y + height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5166 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5167 if (to_y < from_y) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5168 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5169 /* Scrolling up. Make sure we don't copy part of the mode |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5170 line at the bottom. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5171 if (from_y + run->height > bottom_y) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5172 height = bottom_y - from_y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5173 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5174 height = run->height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5175 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5176 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5177 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5178 /* Scolling down. Make sure we don't copy over the mode line. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5179 at the bottom. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5180 if (to_y + run->height > bottom_y) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5181 height = bottom_y - to_y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5182 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5183 height = run->height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5184 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5185 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5186 BLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5187 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5188 /* Cursor off. Will be switched on again in x_update_window_end. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5189 updated_window = w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5190 x_clear_cursor (w); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5191 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5192 XCopyArea (FRAME_X_DISPLAY (f), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5193 FRAME_X_WINDOW (f), FRAME_X_WINDOW (f), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5194 f->output_data.x->normal_gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5195 x, from_y, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5196 width, height, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5197 x, to_y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5198 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5199 UNBLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5200 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5201 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5202 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5203 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5204 /*********************************************************************** |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5205 Exposure Events |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5206 ***********************************************************************/ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5207 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5208 /* Redisplay an exposed area of frame F. X and Y are the upper-left |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5209 corner of the exposed rectangle. W and H are width and height of |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5210 the exposed area. All are pixel values. W or H zero means redraw |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5211 the entire frame. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5212 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5213 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5214 expose_frame (f, x, y, w, h) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5215 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5216 int x, y, w, h; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5217 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5218 XRectangle r; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5219 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5220 TRACE ((stderr, "expose_frame ")); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5221 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5222 /* No need to redraw if frame will be redrawn soon. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5223 if (FRAME_GARBAGED_P (f)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5224 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5225 TRACE ((stderr, " garbaged\n")); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5226 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5227 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5228 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5229 /* If basic faces haven't been realized yet, there is no point in |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5230 trying to redraw anything. This can happen when we get an expose |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5231 event while Emacs is starting, e.g. by moving another window. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5232 if (FRAME_FACE_CACHE (f) == NULL |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5233 || FRAME_FACE_CACHE (f)->used < BASIC_FACE_ID_SENTINEL) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5234 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5235 TRACE ((stderr, " no faces\n")); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5236 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5237 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5238 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5239 if (w == 0 || h == 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5240 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5241 r.x = r.y = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5242 r.width = CANON_X_UNIT (f) * f->width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5243 r.height = CANON_Y_UNIT (f) * f->height; |
286 | 5244 } |
5245 else | |
5246 { | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5247 r.x = x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5248 r.y = y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5249 r.width = w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5250 r.height = h; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5251 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5252 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5253 TRACE ((stderr, "(%d, %d, %d, %d)\n", r.x, r.y, r.width, r.height)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5254 expose_window_tree (XWINDOW (f->root_window), &r); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5255 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
5256 if (WINDOWP (f->tool_bar_window)) |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
5257 { |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
5258 struct window *w = XWINDOW (f->tool_bar_window); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5259 XRectangle window_rect; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5260 XRectangle intersection_rect; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5261 int window_x, window_y, window_width, window_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5262 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5263 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5264 window_box (w, -1, &window_x, &window_y, &window_width, &window_height); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5265 window_rect.x = window_x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5266 window_rect.y = window_y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5267 window_rect.width = window_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5268 window_rect.height = window_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5269 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5270 if (x_intersect_rectangles (&r, &window_rect, &intersection_rect)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5271 expose_window (w, &intersection_rect); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5272 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5273 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5274 #ifndef USE_X_TOOLKIT |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5275 if (WINDOWP (f->menu_bar_window)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5276 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5277 struct window *w = XWINDOW (f->menu_bar_window); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5278 XRectangle window_rect; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5279 XRectangle intersection_rect; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5280 int window_x, window_y, window_width, window_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5281 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5282 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5283 window_box (w, -1, &window_x, &window_y, &window_width, &window_height); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5284 window_rect.x = window_x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5285 window_rect.y = window_y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5286 window_rect.width = window_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5287 window_rect.height = window_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5288 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5289 if (x_intersect_rectangles (&r, &window_rect, &intersection_rect)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5290 expose_window (w, &intersection_rect); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5291 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5292 #endif /* not USE_X_TOOLKIT */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5293 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5294 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5295 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5296 /* Redraw (parts) of all windows in the window tree rooted at W that |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5297 intersect R. R contains frame pixel coordinates. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5298 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5299 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5300 expose_window_tree (w, r) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5301 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5302 XRectangle *r; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5303 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5304 while (w) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5305 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5306 if (!NILP (w->hchild)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5307 expose_window_tree (XWINDOW (w->hchild), r); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5308 else if (!NILP (w->vchild)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5309 expose_window_tree (XWINDOW (w->vchild), r); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5310 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5311 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5312 XRectangle window_rect; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5313 XRectangle intersection_rect; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5314 struct frame *f = XFRAME (w->frame); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5315 int window_x, window_y, window_width, window_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5316 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5317 /* Frame-relative pixel rectangle of W. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5318 window_box (w, -1, &window_x, &window_y, &window_width, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5319 &window_height); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5320 window_rect.x |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5321 = (window_x |
25465 | 5322 - FRAME_X_LEFT_FLAGS_AREA_WIDTH (f) |
25391
2869085f6edc
(expose_window_tree): Fix typo CANON_Y_UNIT to
Gerd Moellmann <gerd@gnu.org>
parents:
25360
diff
changeset
|
5323 - FRAME_LEFT_SCROLL_BAR_WIDTH (f) * CANON_X_UNIT (f)); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5324 window_rect.y = window_y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5325 window_rect.width |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5326 = (window_width |
25465 | 5327 + FRAME_X_FLAGS_AREA_WIDTH (f) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5328 + FRAME_SCROLL_BAR_WIDTH (f) * CANON_X_UNIT (f)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5329 window_rect.height |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5330 = window_height + CURRENT_MODE_LINE_HEIGHT (w); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5331 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5332 if (x_intersect_rectangles (r, &window_rect, &intersection_rect)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5333 expose_window (w, &intersection_rect); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5334 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5335 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5336 w = NILP (w->next) ? 0 : XWINDOW (w->next); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5337 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5338 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5339 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5340 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5341 /* Redraw the part of glyph row area AREA of glyph row ROW on window W |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5342 which intersects rectangle R. R is in window-relative coordinates. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5343 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5344 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5345 expose_area (w, row, r, area) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5346 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5347 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5348 XRectangle *r; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5349 enum glyph_row_area area; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5350 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5351 int x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5352 struct glyph *first = row->glyphs[area]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5353 struct glyph *end = row->glyphs[area] + row->used[area]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5354 struct glyph *last; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5355 int first_x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5356 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5357 /* Set x to the window-relative start position for drawing glyphs of |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5358 AREA. The first glyph of the text area can be partially visible. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5359 The first glyphs of other areas cannot. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5360 if (area == LEFT_MARGIN_AREA) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5361 x = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5362 else if (area == TEXT_AREA) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5363 x = row->x + window_box_width (w, LEFT_MARGIN_AREA); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5364 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5365 x = (window_box_width (w, LEFT_MARGIN_AREA) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5366 + window_box_width (w, TEXT_AREA)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5367 |
25306
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5368 if (area == TEXT_AREA && row->fill_line_p) |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5369 /* If row extends face to end of line write the whole line. */ |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5370 x_draw_glyphs (w, x, row, area, |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5371 0, row->used[area], |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5372 row->inverse_p ? DRAW_INVERSE_VIDEO : DRAW_NORMAL_TEXT, |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
5373 NULL, NULL, 0); |
25306
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5374 else |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5375 { |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5376 /* Find the first glyph that must be redrawn. */ |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5377 while (first < end |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5378 && x + first->pixel_width < r->x) |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5379 { |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5380 x += first->pixel_width; |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5381 ++first; |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5382 } |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5383 |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5384 /* Find the last one. */ |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5385 last = first; |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5386 first_x = x; |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5387 while (last < end |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5388 && x < r->x + r->width) |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5389 { |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5390 x += last->pixel_width; |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5391 ++last; |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5392 } |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5393 |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5394 /* Repaint. */ |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5395 if (last > first) |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5396 x_draw_glyphs (w, first_x, row, area, |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5397 first - row->glyphs[area], |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5398 last - row->glyphs[area], |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5399 row->inverse_p ? DRAW_INVERSE_VIDEO : DRAW_NORMAL_TEXT, |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5400 NULL, NULL, 0); |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5401 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5402 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5403 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5404 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5405 /* Redraw the parts of the glyph row ROW on window W intersecting |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5406 rectangle R. R is in window-relative coordinates. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5407 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5408 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5409 expose_line (w, row, r) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5410 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5411 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5412 XRectangle *r; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5413 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5414 xassert (row->enabled_p); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5415 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5416 if (row->mode_line_p || w->pseudo_window_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5417 x_draw_glyphs (w, 0, row, TEXT_AREA, 0, row->used[TEXT_AREA], |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5418 row->inverse_p ? DRAW_INVERSE_VIDEO : DRAW_NORMAL_TEXT, |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
5419 NULL, NULL, 0); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5420 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5421 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5422 if (row->used[LEFT_MARGIN_AREA]) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5423 expose_area (w, row, r, LEFT_MARGIN_AREA); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5424 if (row->used[TEXT_AREA]) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5425 expose_area (w, row, r, TEXT_AREA); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5426 if (row->used[RIGHT_MARGIN_AREA]) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5427 expose_area (w, row, r, RIGHT_MARGIN_AREA); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5428 x_draw_row_bitmaps (w, row); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5429 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5430 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5431 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5432 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5433 /* Return non-zero if W's cursor intersects rectangle R. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5434 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5435 static int |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5436 x_phys_cursor_in_rect_p (w, r) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5437 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5438 XRectangle *r; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5439 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5440 XRectangle cr, result; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5441 struct glyph *cursor_glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5442 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5443 cursor_glyph = get_phys_cursor_glyph (w); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5444 if (cursor_glyph) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5445 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5446 cr.x = w->phys_cursor.x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5447 cr.y = w->phys_cursor.y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5448 cr.width = cursor_glyph->pixel_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5449 cr.height = w->phys_cursor_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5450 return x_intersect_rectangles (&cr, r, &result); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5451 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5452 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5453 return 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5454 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5455 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5456 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5457 /* Redraw a rectangle of window W. R is a rectangle in window |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5458 relative coordinates. Call this function with input blocked. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5459 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5460 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5461 expose_window (w, r) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5462 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5463 XRectangle *r; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5464 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5465 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5466 int y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5467 int yb = window_text_bottom_y (w); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5468 int cursor_cleared_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5469 |
25529
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
5470 /* If window is not yet fully initialized, do nothing. This can |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
5471 happen when toolkit scroll bars are used and a window is split. |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
5472 Reconfiguring the scroll bar will generate an expose for a newly |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
5473 created window. */ |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
5474 if (w->current_matrix == NULL) |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
5475 return; |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
5476 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5477 TRACE ((stderr, "expose_window (%d, %d, %d, %d)\n", |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5478 r->x, r->y, r->width, r->height)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5479 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5480 /* Convert to window coordinates. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5481 r->x = FRAME_TO_WINDOW_PIXEL_X (w, r->x); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5482 r->y = FRAME_TO_WINDOW_PIXEL_Y (w, r->y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5483 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5484 /* Turn off the cursor. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5485 if (!w->pseudo_window_p |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5486 && x_phys_cursor_in_rect_p (w, r)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5487 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5488 x_clear_cursor (w); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5489 cursor_cleared_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5490 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5491 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5492 cursor_cleared_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5493 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5494 /* Find the first row intersecting the rectangle R. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5495 row = w->current_matrix->rows; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5496 y = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5497 while (row->enabled_p |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5498 && y < yb |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5499 && y + row->height < r->y) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5500 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5501 y += row->height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5502 ++row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5503 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5504 |
286 | 5505 /* Display the text in the rectangle, one text line at a time. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5506 while (row->enabled_p |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5507 && y < yb |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5508 && y < r->y + r->height) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5509 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5510 expose_line (w, row, r); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5511 y += row->height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5512 ++row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5513 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5514 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5515 /* Display the mode line if there is one. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5516 if (WINDOW_WANTS_MODELINE_P (w) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5517 && (row = MATRIX_MODE_LINE_ROW (w->current_matrix), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5518 row->enabled_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5519 && row->y < r->y + r->height) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5520 expose_line (w, row, r); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5521 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5522 if (!w->pseudo_window_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5523 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5524 /* Draw border between windows. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5525 x_draw_vertical_border (w); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5526 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5527 /* Turn the cursor on again. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5528 if (cursor_cleared_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5529 x_update_window_cursor (w, 1); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5530 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5531 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5532 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5533 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5534 /* Determine the intersection of two rectangles R1 and R2. Return |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5535 the intersection in *RESULT. Value is non-zero if RESULT is not |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5536 empty. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5537 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5538 static int |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5539 x_intersect_rectangles (r1, r2, result) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5540 XRectangle *r1, *r2, *result; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5541 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5542 XRectangle *left, *right; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5543 XRectangle *upper, *lower; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5544 int intersection_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5545 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5546 /* Rearrange so that R1 is the left-most rectangle. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5547 if (r1->x < r2->x) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5548 left = r1, right = r2; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5549 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5550 left = r2, right = r1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5551 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5552 /* X0 of the intersection is right.x0, if this is inside R1, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5553 otherwise there is no intersection. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5554 if (right->x <= left->x + left->width) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5555 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5556 result->x = right->x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5557 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5558 /* The right end of the intersection is the minimum of the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5559 the right ends of left and right. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5560 result->width = (min (left->x + left->width, right->x + right->width) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5561 - result->x); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5562 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5563 /* Same game for Y. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5564 if (r1->y < r2->y) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5565 upper = r1, lower = r2; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5566 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5567 upper = r2, lower = r1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5568 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5569 /* The upper end of the intersection is lower.y0, if this is inside |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5570 of upper. Otherwise, there is no intersection. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5571 if (lower->y <= upper->y + upper->height) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5572 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5573 result->y = lower->y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5574 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5575 /* The lower end of the intersection is the minimum of the lower |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5576 ends of upper and lower. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5577 result->height = (min (lower->y + lower->height, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5578 upper->y + upper->height) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5579 - result->y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5580 intersection_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5581 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5582 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5583 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5584 return intersection_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5585 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5586 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5587 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5588 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5589 |
286 | 5590 |
5591 static void | |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5592 frame_highlight (f) |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5593 struct frame *f; |
286 | 5594 { |
3943
cbdf67dd68d0
* xterm.c (frame_highlight, frame_unhighlight): Don't test
Jim Blandy <jimb@redhat.com>
parents:
3938
diff
changeset
|
5595 /* We used to only do this if Vx_no_window_manager was non-nil, but |
cbdf67dd68d0
* xterm.c (frame_highlight, frame_unhighlight): Don't test
Jim Blandy <jimb@redhat.com>
parents:
3938
diff
changeset
|
5596 the ICCCM (section 4.1.6) says that the window's border pixmap |
cbdf67dd68d0
* xterm.c (frame_highlight, frame_unhighlight): Don't test
Jim Blandy <jimb@redhat.com>
parents:
3938
diff
changeset
|
5597 and border pixel are window attributes which are "private to the |
cbdf67dd68d0
* xterm.c (frame_highlight, frame_unhighlight): Don't test
Jim Blandy <jimb@redhat.com>
parents:
3938
diff
changeset
|
5598 client", so we can always change it to whatever we want. */ |
cbdf67dd68d0
* xterm.c (frame_highlight, frame_unhighlight): Don't test
Jim Blandy <jimb@redhat.com>
parents:
3938
diff
changeset
|
5599 BLOCK_INPUT; |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5600 XSetWindowBorder (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:
12657
diff
changeset
|
5601 f->output_data.x->border_pixel); |
3943
cbdf67dd68d0
* xterm.c (frame_highlight, frame_unhighlight): Don't test
Jim Blandy <jimb@redhat.com>
parents:
3938
diff
changeset
|
5602 UNBLOCK_INPUT; |
12431
80a5aedfb4c7
(XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents:
12192
diff
changeset
|
5603 x_update_cursor (f, 1); |
286 | 5604 } |
5605 | |
5606 static void | |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5607 frame_unhighlight (f) |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5608 struct frame *f; |
286 | 5609 { |
3943
cbdf67dd68d0
* xterm.c (frame_highlight, frame_unhighlight): Don't test
Jim Blandy <jimb@redhat.com>
parents:
3938
diff
changeset
|
5610 /* We used to only do this if Vx_no_window_manager was non-nil, but |
cbdf67dd68d0
* xterm.c (frame_highlight, frame_unhighlight): Don't test
Jim Blandy <jimb@redhat.com>
parents:
3938
diff
changeset
|
5611 the ICCCM (section 4.1.6) says that the window's border pixmap |
cbdf67dd68d0
* xterm.c (frame_highlight, frame_unhighlight): Don't test
Jim Blandy <jimb@redhat.com>
parents:
3938
diff
changeset
|
5612 and border pixel are window attributes which are "private to the |
cbdf67dd68d0
* xterm.c (frame_highlight, frame_unhighlight): Don't test
Jim Blandy <jimb@redhat.com>
parents:
3938
diff
changeset
|
5613 client", so we can always change it to whatever we want. */ |
cbdf67dd68d0
* xterm.c (frame_highlight, frame_unhighlight): Don't test
Jim Blandy <jimb@redhat.com>
parents:
3938
diff
changeset
|
5614 BLOCK_INPUT; |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5615 XSetWindowBorderPixmap (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:
12657
diff
changeset
|
5616 f->output_data.x->border_tile); |
3943
cbdf67dd68d0
* xterm.c (frame_highlight, frame_unhighlight): Don't test
Jim Blandy <jimb@redhat.com>
parents:
3938
diff
changeset
|
5617 UNBLOCK_INPUT; |
12431
80a5aedfb4c7
(XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents:
12192
diff
changeset
|
5618 x_update_cursor (f, 1); |
286 | 5619 } |
5620 | |
771 | 5621 /* The focus has changed. Update the frames as necessary to reflect |
5622 the new situation. Note that we can't change the selected frame | |
10546
7515c28a59d9
(x_destroy_window): Don't let frame being destroyed remain in
Richard M. Stallman <rms@gnu.org>
parents:
10366
diff
changeset
|
5623 here, because the Lisp code we are interrupting might become confused. |
3591
507f64624555
Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents:
3585
diff
changeset
|
5624 Each event gets marked with the frame in which it occurred, so the |
10546
7515c28a59d9
(x_destroy_window): Don't let frame being destroyed remain in
Richard M. Stallman <rms@gnu.org>
parents:
10366
diff
changeset
|
5625 Lisp code can tell when the switch took place by examining the events. */ |
369 | 5626 |
5627 static void | |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5628 x_new_focus_frame (dpyinfo, frame) |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5629 struct x_display_info *dpyinfo; |
771 | 5630 struct frame *frame; |
286 | 5631 { |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5632 struct frame *old_focus = dpyinfo->x_focus_frame; |
286 | 5633 |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5634 if (frame != dpyinfo->x_focus_frame) |
286 | 5635 { |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
5636 /* Set this before calling other routines, so that they see |
771 | 5637 the correct value of x_focus_frame. */ |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5638 dpyinfo->x_focus_frame = frame; |
369 | 5639 |
5640 if (old_focus && old_focus->auto_lower) | |
771 | 5641 x_lower_frame (old_focus); |
286 | 5642 |
5643 #if 0 | |
771 | 5644 selected_frame = frame; |
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
5645 XSETFRAME (XWINDOW (selected_frame->selected_window)->frame, |
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
5646 selected_frame); |
771 | 5647 Fselect_window (selected_frame->selected_window); |
5648 choose_minibuf_frame (); | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
5649 #endif /* ! 0 */ |
286 | 5650 |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5651 if (dpyinfo->x_focus_frame && dpyinfo->x_focus_frame->auto_raise) |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5652 pending_autoraise_frame = dpyinfo->x_focus_frame; |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
5653 else |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
5654 pending_autoraise_frame = 0; |
369 | 5655 } |
5656 | |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5657 x_frame_rehighlight (dpyinfo); |
369 | 5658 } |
5659 | |
10223
97fc8c6b4a74
(XTupdate_begin): Discard records of prior mouse highlight
Richard M. Stallman <rms@gnu.org>
parents:
9823
diff
changeset
|
5660 /* Handle an event saying the mouse has moved out of an Emacs frame. */ |
97fc8c6b4a74
(XTupdate_begin): Discard records of prior mouse highlight
Richard M. Stallman <rms@gnu.org>
parents:
9823
diff
changeset
|
5661 |
97fc8c6b4a74
(XTupdate_begin): Discard records of prior mouse highlight
Richard M. Stallman <rms@gnu.org>
parents:
9823
diff
changeset
|
5662 void |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5663 x_mouse_leave (dpyinfo) |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5664 struct x_display_info *dpyinfo; |
10223
97fc8c6b4a74
(XTupdate_begin): Discard records of prior mouse highlight
Richard M. Stallman <rms@gnu.org>
parents:
9823
diff
changeset
|
5665 { |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5666 x_new_focus_frame (dpyinfo, dpyinfo->x_focus_event_frame); |
10223
97fc8c6b4a74
(XTupdate_begin): Discard records of prior mouse highlight
Richard M. Stallman <rms@gnu.org>
parents:
9823
diff
changeset
|
5667 } |
369 | 5668 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
5669 /* The focus has changed, or we have redirected a frame's focus to |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
5670 another frame (this happens when a frame uses a surrogate |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5671 mini-buffer frame). Shift the highlight as appropriate. |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5672 |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5673 The FRAME argument doesn't necessarily have anything to do with which |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5674 frame is being highlighted or un-highlighted; we only use it to find |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5675 the appropriate X display info. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5676 |
369 | 5677 static void |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5678 XTframe_rehighlight (frame) |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5679 struct frame *frame; |
369 | 5680 { |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5681 x_frame_rehighlight (FRAME_X_DISPLAY_INFO (frame)); |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5682 } |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5683 |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5684 static void |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5685 x_frame_rehighlight (dpyinfo) |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5686 struct x_display_info *dpyinfo; |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5687 { |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5688 struct frame *old_highlight = dpyinfo->x_highlight_frame; |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5689 |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5690 if (dpyinfo->x_focus_frame) |
286 | 5691 { |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5692 dpyinfo->x_highlight_frame |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5693 = ((GC_FRAMEP (FRAME_FOCUS_FRAME (dpyinfo->x_focus_frame))) |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5694 ? XFRAME (FRAME_FOCUS_FRAME (dpyinfo->x_focus_frame)) |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5695 : dpyinfo->x_focus_frame); |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5696 if (! FRAME_LIVE_P (dpyinfo->x_highlight_frame)) |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
5697 { |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5698 FRAME_FOCUS_FRAME (dpyinfo->x_focus_frame) = Qnil; |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5699 dpyinfo->x_highlight_frame = dpyinfo->x_focus_frame; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
5700 } |
286 | 5701 } |
369 | 5702 else |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5703 dpyinfo->x_highlight_frame = 0; |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5704 |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5705 if (dpyinfo->x_highlight_frame != old_highlight) |
369 | 5706 { |
5707 if (old_highlight) | |
771 | 5708 frame_unhighlight (old_highlight); |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5709 if (dpyinfo->x_highlight_frame) |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5710 frame_highlight (dpyinfo->x_highlight_frame); |
369 | 5711 } |
286 | 5712 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5713 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5714 |
286 | 5715 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5716 /* Keyboard processing - modifier keys, vendor-specific keysyms, etc. */ |
286 | 5717 |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5718 /* Initialize mode_switch_bit and modifier_meaning. */ |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5719 static void |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5720 x_find_modifier_meanings (dpyinfo) |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5721 struct x_display_info *dpyinfo; |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5722 { |
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5723 int min_code, max_code; |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5724 KeySym *syms; |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5725 int syms_per_code; |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5726 XModifierKeymap *mods; |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5727 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5728 dpyinfo->meta_mod_mask = 0; |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5729 dpyinfo->shift_lock_mask = 0; |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5730 dpyinfo->alt_mod_mask = 0; |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5731 dpyinfo->super_mod_mask = 0; |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5732 dpyinfo->hyper_mod_mask = 0; |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
5733 |
2127
adaf588e32a6
* xterm.c (x_find_modifier_meanings): XDisplayKeycodes only
Jim Blandy <jimb@redhat.com>
parents:
2064
diff
changeset
|
5734 #ifdef HAVE_X11R4 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5735 XDisplayKeycodes (dpyinfo->display, &min_code, &max_code); |
2127
adaf588e32a6
* xterm.c (x_find_modifier_meanings): XDisplayKeycodes only
Jim Blandy <jimb@redhat.com>
parents:
2064
diff
changeset
|
5736 #else |
13884
26245345f6f1
(x_find_modifier_meanings): Fix !X11R4 code to use dpyinfo.
Richard M. Stallman <rms@gnu.org>
parents:
13782
diff
changeset
|
5737 min_code = dpyinfo->display->min_keycode; |
26245345f6f1
(x_find_modifier_meanings): Fix !X11R4 code to use dpyinfo.
Richard M. Stallman <rms@gnu.org>
parents:
13782
diff
changeset
|
5738 max_code = dpyinfo->display->max_keycode; |
2127
adaf588e32a6
* xterm.c (x_find_modifier_meanings): XDisplayKeycodes only
Jim Blandy <jimb@redhat.com>
parents:
2064
diff
changeset
|
5739 #endif |
adaf588e32a6
* xterm.c (x_find_modifier_meanings): XDisplayKeycodes only
Jim Blandy <jimb@redhat.com>
parents:
2064
diff
changeset
|
5740 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5741 syms = XGetKeyboardMapping (dpyinfo->display, |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5742 min_code, max_code - min_code + 1, |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5743 &syms_per_code); |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5744 mods = XGetModifierMapping (dpyinfo->display); |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5745 |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
5746 /* Scan the modifier table to see which modifier bits the Meta and |
1436
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
5747 Alt keysyms are on. */ |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5748 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5749 int row, col; /* The row and column in the modifier table. */ |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5750 |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5751 for (row = 3; row < 8; row++) |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5752 for (col = 0; col < mods->max_keypermod; col++) |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5753 { |
10287
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
5754 KeyCode code |
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
5755 = mods->modifiermap[(row * mods->max_keypermod) + col]; |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5756 |
6560
a071babfa9ea
(x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents:
6521
diff
changeset
|
5757 /* Zeroes are used for filler. Skip them. */ |
a071babfa9ea
(x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents:
6521
diff
changeset
|
5758 if (code == 0) |
a071babfa9ea
(x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents:
6521
diff
changeset
|
5759 continue; |
a071babfa9ea
(x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents:
6521
diff
changeset
|
5760 |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5761 /* Are any of this keycode's keysyms a meta key? */ |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5762 { |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5763 int code_col; |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5764 |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5765 for (code_col = 0; code_col < syms_per_code; code_col++) |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5766 { |
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5767 int sym = syms[((code - min_code) * syms_per_code) + code_col]; |
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5768 |
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5769 switch (sym) |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5770 { |
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5771 case XK_Meta_L: |
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5772 case XK_Meta_R: |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5773 dpyinfo->meta_mod_mask |= (1 << row); |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5774 break; |
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5775 |
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5776 case XK_Alt_L: |
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5777 case XK_Alt_R: |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5778 dpyinfo->alt_mod_mask |= (1 << row); |
2047
e179f9f55aa8
(x_alt_mod_mask, x_super_mod_mask, x_hyper_mod_mask): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
2016
diff
changeset
|
5779 break; |
e179f9f55aa8
(x_alt_mod_mask, x_super_mod_mask, x_hyper_mod_mask): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
2016
diff
changeset
|
5780 |
e179f9f55aa8
(x_alt_mod_mask, x_super_mod_mask, x_hyper_mod_mask): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
2016
diff
changeset
|
5781 case XK_Hyper_L: |
e179f9f55aa8
(x_alt_mod_mask, x_super_mod_mask, x_hyper_mod_mask): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
2016
diff
changeset
|
5782 case XK_Hyper_R: |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5783 dpyinfo->hyper_mod_mask |= (1 << row); |
2047
e179f9f55aa8
(x_alt_mod_mask, x_super_mod_mask, x_hyper_mod_mask): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
2016
diff
changeset
|
5784 break; |
e179f9f55aa8
(x_alt_mod_mask, x_super_mod_mask, x_hyper_mod_mask): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
2016
diff
changeset
|
5785 |
e179f9f55aa8
(x_alt_mod_mask, x_super_mod_mask, x_hyper_mod_mask): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
2016
diff
changeset
|
5786 case XK_Super_L: |
e179f9f55aa8
(x_alt_mod_mask, x_super_mod_mask, x_hyper_mod_mask): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
2016
diff
changeset
|
5787 case XK_Super_R: |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5788 dpyinfo->super_mod_mask |= (1 << row); |
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5789 break; |
1436
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
5790 |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
5791 case XK_Shift_Lock: |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
5792 /* Ignore this if it's not on the lock modifier. */ |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
5793 if ((1 << row) == LockMask) |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5794 dpyinfo->shift_lock_mask = LockMask; |
1436
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
5795 break; |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5796 } |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5797 } |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5798 } |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5799 } |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5800 } |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5801 |
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5802 /* If we couldn't find any meta keys, accept any alt keys as meta keys. */ |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5803 if (! dpyinfo->meta_mod_mask) |
2047
e179f9f55aa8
(x_alt_mod_mask, x_super_mod_mask, x_hyper_mod_mask): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
2016
diff
changeset
|
5804 { |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5805 dpyinfo->meta_mod_mask = dpyinfo->alt_mod_mask; |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5806 dpyinfo->alt_mod_mask = 0; |
2047
e179f9f55aa8
(x_alt_mod_mask, x_super_mod_mask, x_hyper_mod_mask): New variables.
Richard M. Stallman <rms@gnu.org>
parents:
2016
diff
changeset
|
5807 } |
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5808 |
2923
c8997402dd6b
(x_find_modifier_meanings): If some keys are meta and alt,
Richard M. Stallman <rms@gnu.org>
parents:
2882
diff
changeset
|
5809 /* If some keys are both alt and meta, |
c8997402dd6b
(x_find_modifier_meanings): If some keys are meta and alt,
Richard M. Stallman <rms@gnu.org>
parents:
2882
diff
changeset
|
5810 make them just meta, not alt. */ |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5811 if (dpyinfo->alt_mod_mask & dpyinfo->meta_mod_mask) |
2923
c8997402dd6b
(x_find_modifier_meanings): If some keys are meta and alt,
Richard M. Stallman <rms@gnu.org>
parents:
2882
diff
changeset
|
5812 { |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5813 dpyinfo->alt_mod_mask &= ~dpyinfo->meta_mod_mask; |
2923
c8997402dd6b
(x_find_modifier_meanings): If some keys are meta and alt,
Richard M. Stallman <rms@gnu.org>
parents:
2882
diff
changeset
|
5814 } |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
5815 |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5816 XFree ((char *) syms); |
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5817 XFreeModifiermap (mods); |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5818 } |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5819 |
2661
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
5820 /* Convert between the modifier bits X uses and the modifier bits |
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
5821 Emacs uses. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5822 |
1530
a7f8a1fe258e
* xterm.c (x_convert_modifiers): Declare this to return an
Jim Blandy <jimb@redhat.com>
parents:
1436
diff
changeset
|
5823 static unsigned int |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5824 x_x_to_emacs_modifiers (dpyinfo, state) |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5825 struct x_display_info *dpyinfo; |
286 | 5826 unsigned int state; |
5827 { | |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5828 return ( ((state & (ShiftMask | dpyinfo->shift_lock_mask)) ? shift_modifier : 0) |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5829 | ((state & ControlMask) ? ctrl_modifier : 0) |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5830 | ((state & dpyinfo->meta_mod_mask) ? meta_modifier : 0) |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5831 | ((state & dpyinfo->alt_mod_mask) ? alt_modifier : 0) |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5832 | ((state & dpyinfo->super_mod_mask) ? super_modifier : 0) |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5833 | ((state & dpyinfo->hyper_mod_mask) ? hyper_modifier : 0)); |
286 | 5834 } |
5835 | |
2661
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
5836 static unsigned int |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5837 x_emacs_to_x_modifiers (dpyinfo, state) |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5838 struct x_display_info *dpyinfo; |
2661
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
5839 unsigned int state; |
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
5840 { |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5841 return ( ((state & alt_modifier) ? dpyinfo->alt_mod_mask : 0) |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5842 | ((state & super_modifier) ? dpyinfo->super_mod_mask : 0) |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5843 | ((state & hyper_modifier) ? dpyinfo->hyper_mod_mask : 0) |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5844 | ((state & shift_modifier) ? ShiftMask : 0) |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5845 | ((state & ctrl_modifier) ? ControlMask : 0) |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5846 | ((state & meta_modifier) ? dpyinfo->meta_mod_mask : 0)); |
2661
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
5847 } |
12172
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5848 |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5849 /* Convert a keysym to its name. */ |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5850 |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5851 char * |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5852 x_get_keysym_name (keysym) |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5853 KeySym keysym; |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5854 { |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5855 char *value; |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5856 |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5857 BLOCK_INPUT; |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5858 value = XKeysymToString (keysym); |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5859 UNBLOCK_INPUT; |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5860 |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5861 return value; |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5862 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5863 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5864 |
3585
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5865 |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5866 /* Mouse clicks and mouse movement. Rah. */ |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5867 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5868 /* Given a pixel position (PIX_X, PIX_Y) on frame F, return glyph |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5869 co-ordinates in (*X, *Y). Set *BOUNDS to the rectangle that the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5870 glyph at X, Y occupies, if BOUNDS != 0. If NOCLIP is non-zero, do |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5871 not force the value into range. */ |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5872 |
6023
67aa546e4ff1
(construct_menu_click): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents:
6022
diff
changeset
|
5873 void |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5874 pixel_to_glyph_coords (f, pix_x, pix_y, x, y, bounds, noclip) |
3585
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5875 FRAME_PTR f; |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5876 register int pix_x, pix_y; |
3585
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5877 register int *x, *y; |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5878 XRectangle *bounds; |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5879 int noclip; |
3585
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5880 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5881 /* Arrange for the division in PIXEL_TO_CHAR_COL etc. to round down |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5882 even for negative values. */ |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5883 if (pix_x < 0) |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
5884 pix_x -= FONT_WIDTH ((f)->output_data.x->font) - 1; |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5885 if (pix_y < 0) |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
5886 pix_y -= (f)->output_data.x->line_height - 1; |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5887 |
3585
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5888 pix_x = PIXEL_TO_CHAR_COL (f, pix_x); |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5889 pix_y = PIXEL_TO_CHAR_ROW (f, pix_y); |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5890 |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5891 if (bounds) |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5892 { |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
5893 bounds->width = FONT_WIDTH (f->output_data.x->font); |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
5894 bounds->height = f->output_data.x->line_height; |
3585
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5895 bounds->x = CHAR_TO_PIXEL_COL (f, pix_x); |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5896 bounds->y = CHAR_TO_PIXEL_ROW (f, pix_y); |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5897 } |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5898 |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5899 if (!noclip) |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5900 { |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5901 if (pix_x < 0) |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5902 pix_x = 0; |
16301
a02555b4b2b9
(x_scroll_bar_create, x_scroll_bar_move):
Richard M. Stallman <rms@gnu.org>
parents:
16251
diff
changeset
|
5903 else if (pix_x > FRAME_WINDOW_WIDTH (f)) |
a02555b4b2b9
(x_scroll_bar_create, x_scroll_bar_move):
Richard M. Stallman <rms@gnu.org>
parents:
16251
diff
changeset
|
5904 pix_x = FRAME_WINDOW_WIDTH (f); |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5905 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5906 if (pix_y < 0) |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5907 pix_y = 0; |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5908 else if (pix_y > f->height) |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5909 pix_y = f->height; |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5910 } |
3585
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5911 |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5912 *x = pix_x; |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5913 *y = pix_y; |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5914 } |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5915 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5916 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5917 /* Given HPOS/VPOS in the current matrix of W, return corresponding |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5918 frame-relative pixel positions in *FRAME_X and *FRAME_Y. If we |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5919 can't tell the positions because W's display is not up to date, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5920 return 0. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5921 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5922 int |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5923 glyph_to_pixel_coords (w, hpos, vpos, frame_x, frame_y) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5924 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5925 int hpos, vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5926 int *frame_x, *frame_y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5927 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5928 int success_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5929 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5930 xassert (hpos >= 0 && hpos < w->current_matrix->matrix_w); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5931 xassert (vpos >= 0 && vpos < w->current_matrix->matrix_h); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5932 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5933 if (display_completed) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5934 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5935 struct glyph_row *row = MATRIX_ROW (w->current_matrix, vpos); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5936 struct glyph *glyph = row->glyphs[TEXT_AREA]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5937 struct glyph *end = glyph + min (hpos, row->used[TEXT_AREA]); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5938 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5939 *frame_y = row->y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5940 *frame_x = row->x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5941 while (glyph < end) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5942 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5943 *frame_x += glyph->pixel_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5944 ++glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5945 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5946 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5947 success_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5948 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5949 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5950 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5951 *frame_y = *frame_x = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5952 success_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5953 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5954 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5955 *frame_y = WINDOW_TO_FRAME_PIXEL_Y (w, *frame_y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5956 *frame_x = WINDOW_TO_FRAME_PIXEL_X (w, *frame_x); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5957 return success_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5958 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5959 |
6055
a9f61727a90c
(construct_mouse_click): Don't convert to glyph units.
Richard M. Stallman <rms@gnu.org>
parents:
6023
diff
changeset
|
5960 |
286 | 5961 /* Prepare a mouse-event in *RESULT for placement in the input queue. |
5962 | |
5963 If the event is a button press, then note that we have grabbed | |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
5964 the mouse. */ |
286 | 5965 |
5966 static Lisp_Object | |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
5967 construct_mouse_click (result, event, f) |
286 | 5968 struct input_event *result; |
5969 XButtonEvent *event; | |
771 | 5970 struct frame *f; |
286 | 5971 { |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
5972 /* Make the event type no_event; we'll change that when we decide |
286 | 5973 otherwise. */ |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
5974 result->kind = mouse_click; |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5975 result->code = event->button - Button1; |
708 | 5976 result->timestamp = event->time; |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5977 result->modifiers = (x_x_to_emacs_modifiers (FRAME_X_DISPLAY_INFO (f), |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5978 event->state) |
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5979 | (event->type == ButtonRelease |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
5980 ? up_modifier |
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5981 : down_modifier)); |
286 | 5982 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5983 XSETINT (result->x, event->x); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5984 XSETINT (result->y, event->y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5985 XSETFRAME (result->frame_or_window, f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5986 return Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5987 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5988 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5989 #if 0 /* This function isn't called. --gerd */ |
6022
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
5990 |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
5991 /* Prepare a menu-event in *RESULT for placement in the input queue. */ |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
5992 |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
5993 static Lisp_Object |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
5994 construct_menu_click (result, event, f) |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
5995 struct input_event *result; |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
5996 XButtonEvent *event; |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
5997 struct frame *f; |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
5998 { |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
5999 /* Make the event type no_event; we'll change that when we decide |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
6000 otherwise. */ |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
6001 result->kind = mouse_click; |
17371
97283cd93432
(construct_menu_click, note_mouse_highlight, fast_find_position):
Karl Heuer <kwzh@gnu.org>
parents:
17316
diff
changeset
|
6002 result->code = event->button - Button1; |
6022
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
6003 result->timestamp = event->time; |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
6004 result->modifiers = (x_x_to_emacs_modifiers (FRAME_X_DISPLAY_INFO (f), |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
6005 event->state) |
6022
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
6006 | (event->type == ButtonRelease |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
6007 ? up_modifier |
6022
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
6008 : down_modifier)); |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
6009 |
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
6010 XSETINT (result->x, event->x); |
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
6011 XSETINT (result->y, -1); |
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
6012 XSETFRAME (result->frame_or_window, f); |
6022
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
6013 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6014 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6015 #endif /* 0 */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6016 |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6017 |
429 | 6018 /* Function to report a mouse movement to the mainstream Emacs code. |
6019 The input handler calls this. | |
6020 | |
6021 We have received a mouse movement event, which is given in *event. | |
6022 If the mouse is over a different glyph than it was last time, tell | |
6023 the mainstream emacs code by setting mouse_moved. If not, ask for | |
6024 another motion event, so we can check again the next time it moves. */ | |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6025 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6026 static XMotionEvent last_mouse_motion_event; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6027 static Lisp_Object last_mouse_motion_frame; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6028 |
429 | 6029 static void |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6030 note_mouse_movement (frame, event) |
771 | 6031 FRAME_PTR frame; |
429 | 6032 XMotionEvent *event; |
6033 { | |
732 | 6034 last_mouse_movement_time = event->time; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6035 last_mouse_motion_event = *event; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6036 XSETFRAME (last_mouse_motion_frame, frame); |
732 | 6037 |
7680
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
6038 if (event->window != FRAME_X_WINDOW (frame)) |
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
6039 { |
12530
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
6040 frame->mouse_moved = 1; |
7680
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
6041 last_mouse_scroll_bar = Qnil; |
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
6042 note_mouse_highlight (frame, -1, -1); |
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
6043 } |
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
6044 |
429 | 6045 /* Has the mouse moved off the glyph it was on at the last sighting? */ |
7680
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
6046 else if (event->x < last_mouse_glyph.x |
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
6047 || event->x >= last_mouse_glyph.x + last_mouse_glyph.width |
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
6048 || event->y < last_mouse_glyph.y |
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
6049 || event->y >= last_mouse_glyph.y + last_mouse_glyph.height) |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6050 { |
12530
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
6051 frame->mouse_moved = 1; |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
6052 last_mouse_scroll_bar = Qnil; |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6053 note_mouse_highlight (frame, event->x, event->y); |
429 | 6054 } |
6055 } | |
6056 | |
6644
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
6057 /* This is used for debugging, to turn off note_mouse_highlight. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6058 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6059 int disable_mouse_highlight; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6060 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6061 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6062 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6063 /************************************************************************ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6064 Mouse Face |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6065 ************************************************************************/ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6066 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6067 /* Find the glyph under window-relative coordinates X/Y in window W. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6068 Consider only glyphs from buffer text, i.e. no glyphs from overlay |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6069 strings. Return in *HPOS and *VPOS the row and column number of |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6070 the glyph found. Return in *AREA the glyph area containing X. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6071 Value is a pointer to the glyph found or null if X/Y is not on |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6072 text, or we can't tell because W's current matrix is not up to |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6073 date. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6074 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6075 static struct glyph * |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6076 x_y_to_hpos_vpos (w, x, y, hpos, vpos, area) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6077 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6078 int x, y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6079 int *hpos, *vpos, *area; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6080 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6081 struct glyph *glyph, *end; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6082 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6083 int x0, i, left_area_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6084 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6085 /* Find row containing Y. Give up if some row is not enabled. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6086 for (i = 0; i < w->current_matrix->nrows; ++i) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6087 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6088 row = MATRIX_ROW (w->current_matrix, i); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6089 if (!row->enabled_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6090 return NULL; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6091 if (y >= row->y && y < MATRIX_ROW_BOTTOM_Y (row)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6092 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6093 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6094 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6095 *vpos = i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6096 *hpos = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6097 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6098 /* Give up if Y is not in the window. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6099 if (i == w->current_matrix->nrows) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6100 return NULL; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6101 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6102 /* Get the glyph area containing X. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6103 if (w->pseudo_window_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6104 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6105 *area = TEXT_AREA; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6106 x0 = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6107 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6108 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6109 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6110 left_area_width = window_box_width (w, LEFT_MARGIN_AREA); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6111 if (x < left_area_width) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6112 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6113 *area = LEFT_MARGIN_AREA; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6114 x0 = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6115 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6116 else if (x < left_area_width + window_box_width (w, TEXT_AREA)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6117 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6118 *area = TEXT_AREA; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6119 x0 = row->x + left_area_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6120 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6121 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6122 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6123 *area = RIGHT_MARGIN_AREA; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6124 x0 = left_area_width + window_box_width (w, TEXT_AREA); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6125 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6126 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6127 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6128 /* Find glyph containing X. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6129 glyph = row->glyphs[*area]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6130 end = glyph + row->used[*area]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6131 while (glyph < end) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6132 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6133 if (x < x0 + glyph->pixel_width) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6134 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6135 if (w->pseudo_window_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6136 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6137 else if (BUFFERP (glyph->object)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6138 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6139 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6140 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6141 x0 += glyph->pixel_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6142 ++glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6143 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6144 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6145 if (glyph == end) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6146 return NULL; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6147 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6148 *hpos = glyph - row->glyphs[*area]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6149 return glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6150 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6151 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6152 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6153 /* Convert frame-relative x/y to coordinates relative to window W. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6154 Takes pseudo-windows into account. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6155 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6156 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6157 frame_to_window_pixel_xy (w, x, y) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6158 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6159 int *x, *y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6160 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6161 if (w->pseudo_window_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6162 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6163 /* A pseudo-window is always full-width, and starts at the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6164 left edge of the frame, plus a frame border. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6165 struct frame *f = XFRAME (w->frame); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6166 *x -= FRAME_INTERNAL_BORDER_WIDTH_SAFE (f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6167 *y = FRAME_TO_WINDOW_PIXEL_Y (w, *y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6168 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6169 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6170 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6171 *x = FRAME_TO_WINDOW_PIXEL_X (w, *x); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6172 *y = FRAME_TO_WINDOW_PIXEL_Y (w, *y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6173 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6174 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6175 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6176 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6177 /* Take proper action when mouse has moved to the mode or top line of |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6178 window W, x-position X. MODE_LINE_P non-zero means mouse is on the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6179 mode line. X is relative to the start of the text display area of |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6180 W, so the width of bitmap areas and scroll bars must be subtracted |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6181 to get a position relative to the start of the mode line. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6182 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6183 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6184 note_mode_line_highlight (w, x, mode_line_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6185 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6186 int x, mode_line_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6187 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6188 struct frame *f = XFRAME (w->frame); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6189 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6190 Cursor cursor = dpyinfo->vertical_scroll_bar_cursor; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6191 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6192 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6193 if (mode_line_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6194 row = MATRIX_MODE_LINE_ROW (w->current_matrix); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6195 else |
25546 | 6196 row = MATRIX_HEADER_LINE_ROW (w->current_matrix); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6197 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6198 if (row->enabled_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6199 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6200 struct glyph *glyph, *end; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6201 Lisp_Object help, map; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6202 int x0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6203 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6204 /* Find the glyph under X. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6205 glyph = row->glyphs[TEXT_AREA]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6206 end = glyph + row->used[TEXT_AREA]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6207 x0 = - (FRAME_LEFT_SCROLL_BAR_WIDTH (f) * CANON_X_UNIT (f) |
25465 | 6208 + FRAME_X_LEFT_FLAGS_AREA_WIDTH (f)); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6209 while (glyph < end |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6210 && x >= x0 + glyph->pixel_width) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6211 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6212 x0 += glyph->pixel_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6213 ++glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6214 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6215 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6216 if (glyph < end |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6217 && STRINGP (glyph->object) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6218 && XSTRING (glyph->object)->intervals |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6219 && glyph->charpos >= 0 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6220 && glyph->charpos < XSTRING (glyph->object)->size) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6221 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6222 /* If we're on a string with `help-echo' text property, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6223 arrange for the help to be displayed. This is done by |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6224 setting the global variable help_echo to the help string. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6225 help = Fget_text_property (make_number (glyph->charpos), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6226 Qhelp_echo, glyph->object); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6227 if (STRINGP (help)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6228 help_echo = help; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6229 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6230 /* Change the mouse pointer according to what is under X/Y. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6231 map = Fget_text_property (make_number (glyph->charpos), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6232 Qlocal_map, glyph->object); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6233 if (!NILP (Fkeymapp (map))) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6234 cursor = f->output_data.x->nontext_cursor; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6235 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6236 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6237 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6238 XDefineCursor (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), cursor); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6239 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6240 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6241 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6242 /* Take proper action when the mouse has moved to position X, Y on |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6243 frame F as regards highlighting characters that have mouse-face |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6244 properties. Also de-highlighting chars where the mouse was before. |
7680
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
6245 X and Y can be negative or out of range. */ |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6246 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6247 static void |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6248 note_mouse_highlight (f, x, y) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6249 struct frame *f; |
11915
e2ab839155e1
(XTflash): Use pointers as args to select.
Karl Heuer <kwzh@gnu.org>
parents:
11904
diff
changeset
|
6250 int x, y; |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6251 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6252 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6253 int portion; |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6254 Lisp_Object window; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6255 struct window *w; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6256 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6257 /* When a menu is active, don't highlight because this looks odd. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6258 #ifdef USE_X_TOOLKIT |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6259 if (popup_activated ()) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6260 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6261 #endif |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6262 |
6644
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
6263 if (disable_mouse_highlight) |
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
6264 return; |
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
6265 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6266 dpyinfo->mouse_face_mouse_x = x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6267 dpyinfo->mouse_face_mouse_y = y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6268 dpyinfo->mouse_face_mouse_frame = f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6269 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6270 if (dpyinfo->mouse_face_defer) |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6271 return; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6272 |
6660
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
6273 if (gc_in_progress) |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
6274 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6275 dpyinfo->mouse_face_deferred_gc = 1; |
6660
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
6276 return; |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
6277 } |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
6278 |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6279 /* Which window is that in? */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6280 window = window_from_coordinates (f, x, y, &portion, 1); |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6281 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6282 /* If we were displaying active text in another window, clear that. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6283 if (! EQ (window, dpyinfo->mouse_face_window)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6284 clear_mouse_face (dpyinfo); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6285 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6286 /* Not on a window -> return. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6287 if (!WINDOWP (window)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6288 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6289 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6290 /* Convert to window-relative pixel coordinates. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6291 w = XWINDOW (window); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6292 frame_to_window_pixel_xy (w, &x, &y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6293 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6294 /* Handle tool-bar window differently since it doesn't display a |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6295 buffer. */ |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6296 if (EQ (window, f->tool_bar_window)) |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6297 { |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6298 note_tool_bar_highlight (f, x, y); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6299 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6300 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6301 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6302 if (portion == 1 || portion == 3) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6303 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6304 /* Mouse is on the mode or top line. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6305 note_mode_line_highlight (w, x, portion == 1); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6306 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6307 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6308 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6309 XDefineCursor (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6310 f->output_data.x->text_cursor); |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6311 |
6791
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
6312 /* Are we in a window whose display is up to date? |
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
6313 And verify the buffer's text has not changed. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6314 if (/* Within text portion of the window. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6315 portion == 0 |
6791
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
6316 && EQ (w->window_end_valid, w->buffer) |
17371
97283cd93432
(construct_menu_click, note_mouse_highlight, fast_find_position):
Karl Heuer <kwzh@gnu.org>
parents:
17316
diff
changeset
|
6317 && XFASTINT (w->last_modified) == BUF_MODIFF (XBUFFER (w->buffer)) |
97283cd93432
(construct_menu_click, note_mouse_highlight, fast_find_position):
Karl Heuer <kwzh@gnu.org>
parents:
17316
diff
changeset
|
6318 && (XFASTINT (w->last_overlay_modified) |
97283cd93432
(construct_menu_click, note_mouse_highlight, fast_find_position):
Karl Heuer <kwzh@gnu.org>
parents:
17316
diff
changeset
|
6319 == BUF_OVERLAY_MODIFF (XBUFFER (w->buffer)))) |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6320 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6321 int hpos, vpos, pos, i, area; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6322 struct glyph *glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6323 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6324 /* Find the glyph under X/Y. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6325 glyph = x_y_to_hpos_vpos (w, x, y, &hpos, &vpos, &area); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6326 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6327 /* Clear mouse face if X/Y not over text. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6328 if (glyph == NULL |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6329 || area != TEXT_AREA |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6330 || !MATRIX_ROW (w->current_matrix, vpos)->displays_text_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6331 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6332 clear_mouse_face (dpyinfo); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6333 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6334 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6335 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6336 pos = glyph->charpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6337 xassert (w->pseudo_window_p || BUFFERP (glyph->object)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6338 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6339 /* Check for mouse-face and help-echo. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6340 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6341 Lisp_Object mouse_face, overlay, position; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6342 Lisp_Object *overlay_vec; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6343 int len, noverlays; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6344 struct buffer *obuf; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6345 int obegv, ozv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6346 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6347 /* If we get an out-of-range value, return now; avoid an error. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6348 if (pos > BUF_Z (XBUFFER (w->buffer))) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6349 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6350 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6351 /* Make the window's buffer temporarily current for |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6352 overlays_at and compute_char_face. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6353 obuf = current_buffer; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6354 current_buffer = XBUFFER (w->buffer); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6355 obegv = BEGV; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6356 ozv = ZV; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6357 BEGV = BEG; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6358 ZV = Z; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6359 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6360 /* Is this char mouse-active or does it have help-echo? */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6361 XSETINT (position, pos); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6362 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6363 /* Put all the overlays we want in a vector in overlay_vec. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6364 Store the length in len. If there are more than 10, make |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6365 enough space for all, and try again. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6366 len = 10; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6367 overlay_vec = (Lisp_Object *) alloca (len * sizeof (Lisp_Object)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6368 noverlays = overlays_at (pos, 0, &overlay_vec, &len, NULL, NULL); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6369 if (noverlays > len) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6370 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6371 len = noverlays; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6372 overlay_vec = (Lisp_Object *) alloca (len * sizeof (Lisp_Object)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6373 noverlays = overlays_at (pos, 0, &overlay_vec, &len, NULL, NULL); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6374 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6375 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6376 noverlays = sort_overlays (overlay_vec, noverlays, w); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6377 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6378 /* Check mouse-face highlighting. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6379 if (! (EQ (window, dpyinfo->mouse_face_window) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6380 && vpos >= dpyinfo->mouse_face_beg_row |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6381 && vpos <= dpyinfo->mouse_face_end_row |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6382 && (vpos > dpyinfo->mouse_face_beg_row |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6383 || hpos >= dpyinfo->mouse_face_beg_col) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6384 && (vpos < dpyinfo->mouse_face_end_row |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6385 || hpos < dpyinfo->mouse_face_end_col |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6386 || dpyinfo->mouse_face_past_end))) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6387 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6388 /* Clear the display of the old active region, if any. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6389 clear_mouse_face (dpyinfo); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6390 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6391 /* Find the highest priority overlay that has a mouse-face prop. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6392 overlay = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6393 for (i = 0; i < noverlays; i++) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6394 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6395 mouse_face = Foverlay_get (overlay_vec[i], Qmouse_face); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6396 if (!NILP (mouse_face)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6397 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6398 overlay = overlay_vec[i]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6399 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6400 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6401 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6402 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6403 /* If no overlay applies, get a text property. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6404 if (NILP (overlay)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6405 mouse_face = Fget_text_property (position, Qmouse_face, w->buffer); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6406 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6407 /* Handle the overlay case. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6408 if (! NILP (overlay)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6409 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6410 /* Find the range of text around this char that |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6411 should be active. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6412 Lisp_Object before, after; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6413 int ignore; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6414 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6415 before = Foverlay_start (overlay); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6416 after = Foverlay_end (overlay); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6417 /* Record this as the current active region. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6418 fast_find_position (w, XFASTINT (before), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6419 &dpyinfo->mouse_face_beg_col, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6420 &dpyinfo->mouse_face_beg_row, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6421 &dpyinfo->mouse_face_beg_x, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6422 &dpyinfo->mouse_face_beg_y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6423 dpyinfo->mouse_face_past_end |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6424 = !fast_find_position (w, XFASTINT (after), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6425 &dpyinfo->mouse_face_end_col, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6426 &dpyinfo->mouse_face_end_row, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6427 &dpyinfo->mouse_face_end_x, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6428 &dpyinfo->mouse_face_end_y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6429 dpyinfo->mouse_face_window = window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6430 dpyinfo->mouse_face_face_id |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6431 = face_at_buffer_position (w, pos, 0, 0, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6432 &ignore, pos + 1, 1); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6433 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6434 /* Display it as active. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6435 show_mouse_face (dpyinfo, DRAW_MOUSE_FACE); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6436 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6437 /* Handle the text property case. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6438 else if (! NILP (mouse_face)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6439 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6440 /* Find the range of text around this char that |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6441 should be active. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6442 Lisp_Object before, after, beginning, end; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6443 int ignore; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6444 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6445 beginning = Fmarker_position (w->start); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6446 XSETINT (end, (BUF_Z (XBUFFER (w->buffer)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6447 - XFASTINT (w->window_end_pos))); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6448 before |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6449 = Fprevious_single_property_change (make_number (pos + 1), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6450 Qmouse_face, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6451 w->buffer, beginning); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6452 after |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6453 = Fnext_single_property_change (position, Qmouse_face, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6454 w->buffer, end); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6455 /* Record this as the current active region. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6456 fast_find_position (w, XFASTINT (before), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6457 &dpyinfo->mouse_face_beg_col, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6458 &dpyinfo->mouse_face_beg_row, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6459 &dpyinfo->mouse_face_beg_x, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6460 &dpyinfo->mouse_face_beg_y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6461 dpyinfo->mouse_face_past_end |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6462 = !fast_find_position (w, XFASTINT (after), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6463 &dpyinfo->mouse_face_end_col, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6464 &dpyinfo->mouse_face_end_row, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6465 &dpyinfo->mouse_face_end_x, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6466 &dpyinfo->mouse_face_end_y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6467 dpyinfo->mouse_face_window = window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6468 dpyinfo->mouse_face_face_id |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6469 = face_at_buffer_position (w, pos, 0, 0, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6470 &ignore, pos + 1, 1); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6471 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6472 /* Display it as active. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6473 show_mouse_face (dpyinfo, DRAW_MOUSE_FACE); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6474 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6475 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6476 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6477 /* Look for a `help-echo' property. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6478 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6479 Lisp_Object help; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6480 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6481 /* Check overlays first. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6482 help = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6483 for (i = 0; i < noverlays && !STRINGP (help); ++i) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6484 help = Foverlay_get (overlay_vec[i], Qhelp_echo); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6485 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6486 /* Try text properties. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6487 if (!STRINGP (help) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6488 && ((STRINGP (glyph->object) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6489 && glyph->charpos >= 0 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6490 && glyph->charpos < XSTRING (glyph->object)->size) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6491 || (BUFFERP (glyph->object) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6492 && glyph->charpos >= BEGV |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6493 && glyph->charpos < ZV))) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6494 help = Fget_text_property (make_number (glyph->charpos), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6495 Qhelp_echo, glyph->object); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6496 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6497 if (STRINGP (help)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6498 help_echo = help; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6499 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6500 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6501 BEGV = obegv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6502 ZV = ozv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6503 current_buffer = obuf; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6504 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6505 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6506 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6507 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6508 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6509 redo_mouse_highlight () |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6510 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6511 if (!NILP (last_mouse_motion_frame) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6512 && FRAME_LIVE_P (XFRAME (last_mouse_motion_frame))) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6513 note_mouse_highlight (XFRAME (last_mouse_motion_frame), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6514 last_mouse_motion_event.x, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6515 last_mouse_motion_event.y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6516 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6517 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6518 |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6519 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6520 /*********************************************************************** |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6521 Tool-bars |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6522 ***********************************************************************/ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6523 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6524 static int x_tool_bar_item P_ ((struct frame *, int, int, |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6525 struct glyph **, int *, int *, int *)); |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6526 |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6527 /* Tool-bar item index of the item on which a mouse button was pressed |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6528 or -1. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6529 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6530 static int last_tool_bar_item; |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6531 |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6532 |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6533 /* Get information about the tool-bar item at position X/Y on frame F. |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6534 Return in *GLYPH a pointer to the glyph of the tool-bar item in |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6535 the current matrix of the tool-bar window of F, or NULL if not |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6536 on a tool-bar item. Return in *PROP_IDX the index of the tool-bar |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6537 item in F->current_tool_bar_items. Value is |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6538 |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6539 -1 if X/Y is not on a tool-bar item |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6540 0 if X/Y is on the same item that was highlighted before. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6541 1 otherwise. */ |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6542 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6543 static int |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6544 x_tool_bar_item (f, x, y, glyph, hpos, vpos, prop_idx) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6545 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6546 int x, y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6547 struct glyph **glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6548 int *hpos, *vpos, *prop_idx; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6549 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6550 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6551 struct window *w = XWINDOW (f->tool_bar_window); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6552 int area; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6553 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6554 /* Find the glyph under X/Y. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6555 *glyph = x_y_to_hpos_vpos (w, x, y, hpos, vpos, &area); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6556 if (*glyph == NULL) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6557 return -1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6558 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6559 /* Get the start of this tool-bar item's properties in |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6560 f->current_tool_bar_items. */ |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6561 if (!tool_bar_item_info (f, *glyph, prop_idx)) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6562 return -1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6563 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6564 /* Is mouse on the highlighted item? */ |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6565 if (EQ (f->tool_bar_window, dpyinfo->mouse_face_window) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6566 && *vpos >= dpyinfo->mouse_face_beg_row |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6567 && *vpos <= dpyinfo->mouse_face_end_row |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6568 && (*vpos > dpyinfo->mouse_face_beg_row |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6569 || *hpos >= dpyinfo->mouse_face_beg_col) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6570 && (*vpos < dpyinfo->mouse_face_end_row |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6571 || *hpos < dpyinfo->mouse_face_end_col |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6572 || dpyinfo->mouse_face_past_end)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6573 return 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6574 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6575 return 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6576 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6577 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6578 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6579 /* Handle mouse button event on the tool-bar of frame F, at |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6580 frame-relative coordinates X/Y. EVENT_TYPE is either ButtionPress |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6581 or ButtonRelase. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6582 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6583 static void |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6584 x_handle_tool_bar_click (f, button_event) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6585 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6586 XButtonEvent *button_event; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6587 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6588 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6589 struct window *w = XWINDOW (f->tool_bar_window); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6590 int hpos, vpos, prop_idx; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6591 struct glyph *glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6592 Lisp_Object enabled_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6593 int x = button_event->x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6594 int y = button_event->y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6595 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6596 /* If not on the highlighted tool-bar item, return. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6597 frame_to_window_pixel_xy (w, &x, &y); |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6598 if (x_tool_bar_item (f, x, y, &glyph, &hpos, &vpos, &prop_idx) != 0) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6599 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6600 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6601 /* If item is disabled, do nothing. */ |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6602 enabled_p = (XVECTOR (f->current_tool_bar_items) |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6603 ->contents[prop_idx + TOOL_BAR_ITEM_ENABLED_P]); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6604 if (NILP (enabled_p)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6605 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6606 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6607 if (button_event->type == ButtonPress) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6608 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6609 /* Show item in pressed state. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6610 show_mouse_face (dpyinfo, DRAW_IMAGE_SUNKEN); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6611 dpyinfo->mouse_face_image_state = DRAW_IMAGE_SUNKEN; |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6612 last_tool_bar_item = prop_idx; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6613 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6614 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6615 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6616 Lisp_Object key, frame; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6617 struct input_event event; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6618 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6619 /* Show item in released state. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6620 show_mouse_face (dpyinfo, DRAW_IMAGE_RAISED); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6621 dpyinfo->mouse_face_image_state = DRAW_IMAGE_RAISED; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6622 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6623 key = (XVECTOR (f->current_tool_bar_items) |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6624 ->contents[prop_idx + TOOL_BAR_ITEM_KEY]); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6625 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6626 XSETFRAME (frame, f); |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6627 event.kind = TOOL_BAR_EVENT; |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6628 event.frame_or_window = Fcons (frame, Fcons (Qtool_bar, Qnil)); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6629 kbd_buffer_store_event (&event); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6630 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6631 event.kind = TOOL_BAR_EVENT; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6632 event.frame_or_window = Fcons (frame, key); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6633 event.modifiers = x_x_to_emacs_modifiers (FRAME_X_DISPLAY_INFO (f), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6634 button_event->state); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6635 kbd_buffer_store_event (&event); |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6636 last_tool_bar_item = -1; |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6637 } |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6638 } |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6639 |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6640 |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6641 /* Possibly highlight a tool-bar item on frame F when mouse moves to |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6642 tool-bar window-relative coordinates X/Y. Called from |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6643 note_mouse_highlight. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6644 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6645 static void |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6646 note_tool_bar_highlight (f, x, y) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6647 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6648 int x, y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6649 { |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6650 Lisp_Object window = f->tool_bar_window; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6651 struct window *w = XWINDOW (window); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6652 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6653 int hpos, vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6654 struct glyph *glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6655 struct glyph_row *row; |
25716
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
6656 int i; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6657 Lisp_Object enabled_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6658 int prop_idx; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6659 enum draw_glyphs_face draw = DRAW_IMAGE_RAISED; |
25716
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
6660 int mouse_down_p, rc; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6661 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6662 /* Function note_mouse_highlight is called with negative x(y |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6663 values when mouse moves outside of the frame. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6664 if (x <= 0 || y <= 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6665 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6666 clear_mouse_face (dpyinfo); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6667 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6668 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6669 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6670 rc = x_tool_bar_item (f, x, y, &glyph, &hpos, &vpos, &prop_idx); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6671 if (rc < 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6672 { |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6673 /* Not on tool-bar item. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6674 clear_mouse_face (dpyinfo); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6675 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6676 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6677 else if (rc == 0) |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6678 /* On same tool-bar item as before. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6679 goto set_help_echo; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6680 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6681 clear_mouse_face (dpyinfo); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6682 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6683 /* Mouse is down, but on different tool-bar item? */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6684 mouse_down_p = (dpyinfo->grabbed |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6685 && f == last_mouse_frame |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6686 && FRAME_LIVE_P (f)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6687 if (mouse_down_p |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6688 && last_tool_bar_item != prop_idx) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6689 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6690 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6691 dpyinfo->mouse_face_image_state = DRAW_NORMAL_TEXT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6692 draw = mouse_down_p ? DRAW_IMAGE_SUNKEN : DRAW_IMAGE_RAISED; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6693 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6694 /* If tool-bar item is not enabled, don't highlight it. */ |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6695 enabled_p = (XVECTOR (f->current_tool_bar_items) |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6696 ->contents[prop_idx + TOOL_BAR_ITEM_ENABLED_P]); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6697 if (!NILP (enabled_p)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6698 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6699 /* Compute the x-position of the glyph. In front and past the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6700 image is a space. We include this is the highlighted area. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6701 row = MATRIX_ROW (w->current_matrix, vpos); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6702 for (i = x = 0; i < hpos; ++i) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6703 x += row->glyphs[TEXT_AREA][i].pixel_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6704 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6705 /* Record this as the current active region. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6706 dpyinfo->mouse_face_beg_col = hpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6707 dpyinfo->mouse_face_beg_row = vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6708 dpyinfo->mouse_face_beg_x = x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6709 dpyinfo->mouse_face_beg_y = row->y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6710 dpyinfo->mouse_face_past_end = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6711 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6712 dpyinfo->mouse_face_end_col = hpos + 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6713 dpyinfo->mouse_face_end_row = vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6714 dpyinfo->mouse_face_end_x = x + glyph->pixel_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6715 dpyinfo->mouse_face_end_y = row->y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6716 dpyinfo->mouse_face_window = window; |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6717 dpyinfo->mouse_face_face_id = TOOL_BAR_FACE_ID; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6718 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6719 /* Display it as active. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6720 show_mouse_face (dpyinfo, draw); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6721 dpyinfo->mouse_face_image_state = draw; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6722 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6723 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6724 set_help_echo: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6725 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6726 /* Set help_echo to a help string.to display for this tool-bar item. |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6727 XTread_socket does the rest. */ |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6728 help_echo = (XVECTOR (f->current_tool_bar_items) |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6729 ->contents[prop_idx + TOOL_BAR_ITEM_HELP]); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6730 if (!STRINGP (help_echo)) |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6731 help_echo = (XVECTOR (f->current_tool_bar_items) |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6732 ->contents[prop_idx + TOOL_BAR_ITEM_CAPTION]); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6733 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6734 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6735 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6736 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6737 /* Find the glyph matrix position of buffer position POS in window W. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6738 *HPOS, *VPOS, *X, and *Y are set to the positions found. W's |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6739 current glyphs must be up to date. If POS is above window start |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6740 return (0, 0, 0, 0). If POS is after end of W, return end of |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6741 last line in W. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6742 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6743 static int |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6744 fast_find_position (w, pos, hpos, vpos, x, y) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6745 struct window *w; |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6746 int pos; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6747 int *hpos, *vpos, *x, *y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6748 { |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6749 int i; |
6644
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
6750 int lastcol; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6751 int maybe_next_line_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6752 int line_start_position; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6753 int yb = window_text_bottom_y (w); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6754 struct glyph_row *row = MATRIX_ROW (w->current_matrix, 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6755 struct glyph_row *best_row = row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6756 int row_vpos = 0, best_row_vpos = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6757 int current_x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6758 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6759 while (row->y < yb) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6760 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6761 if (row->used[TEXT_AREA]) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6762 line_start_position = row->glyphs[TEXT_AREA]->charpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6763 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6764 line_start_position = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6765 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6766 if (line_start_position > pos) |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6767 break; |
9762
567e3670acc3
(fast_find_position): Special case if POS is end of buffer.
Richard M. Stallman <rms@gnu.org>
parents:
9741
diff
changeset
|
6768 /* If the position sought is the end of the buffer, |
567e3670acc3
(fast_find_position): Special case if POS is end of buffer.
Richard M. Stallman <rms@gnu.org>
parents:
9741
diff
changeset
|
6769 don't include the blank lines at the bottom of the window. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6770 else if (line_start_position == pos |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6771 && pos == BUF_ZV (XBUFFER (w->buffer))) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6772 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6773 maybe_next_line_p = 1; |
9762
567e3670acc3
(fast_find_position): Special case if POS is end of buffer.
Richard M. Stallman <rms@gnu.org>
parents:
9741
diff
changeset
|
6774 break; |
567e3670acc3
(fast_find_position): Special case if POS is end of buffer.
Richard M. Stallman <rms@gnu.org>
parents:
9741
diff
changeset
|
6775 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6776 else if (line_start_position > 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6777 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6778 best_row = row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6779 best_row_vpos = row_vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6780 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6781 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6782 ++row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6783 ++row_vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6784 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6785 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6786 /* Find the right column within BEST_ROW. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6787 lastcol = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6788 current_x = best_row->x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6789 for (i = 0; i < best_row->used[TEXT_AREA]; i++) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6790 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6791 struct glyph *glyph = best_row->glyphs[TEXT_AREA] + i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6792 int charpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6793 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6794 charpos = glyph->charpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6795 if (charpos == pos) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6796 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6797 *hpos = i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6798 *vpos = best_row_vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6799 *x = current_x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6800 *y = best_row->y; |
6644
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
6801 return 1; |
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
6802 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6803 else if (charpos > pos) |
7651
1569a13efdcd
(x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents:
7602
diff
changeset
|
6804 break; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6805 else if (charpos > 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6806 lastcol = i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6807 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6808 current_x += glyph->pixel_width; |
6644
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
6809 } |
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
6810 |
9762
567e3670acc3
(fast_find_position): Special case if POS is end of buffer.
Richard M. Stallman <rms@gnu.org>
parents:
9741
diff
changeset
|
6811 /* If we're looking for the end of the buffer, |
567e3670acc3
(fast_find_position): Special case if POS is end of buffer.
Richard M. Stallman <rms@gnu.org>
parents:
9741
diff
changeset
|
6812 and we didn't find it in the line we scanned, |
567e3670acc3
(fast_find_position): Special case if POS is end of buffer.
Richard M. Stallman <rms@gnu.org>
parents:
9741
diff
changeset
|
6813 use the start of the following line. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6814 if (maybe_next_line_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6815 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6816 ++best_row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6817 ++best_row_vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6818 lastcol = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6819 current_x = best_row->x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6820 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6821 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6822 *vpos = best_row_vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6823 *hpos = lastcol + 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6824 *x = current_x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6825 *y = best_row->y; |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6826 return 0; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6827 } |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6828 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6829 |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6830 /* Display the active region described by mouse_face_* |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6831 in its mouse-face if HL > 0, in its normal face if HL = 0. */ |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6832 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6833 static void |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6834 show_mouse_face (dpyinfo, draw) |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
6835 struct x_display_info *dpyinfo; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6836 enum draw_glyphs_face draw; |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6837 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
6838 struct window *w = XWINDOW (dpyinfo->mouse_face_window); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6839 struct frame *f = XFRAME (WINDOW_FRAME (w)); |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6840 int i; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6841 int cursor_off_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6842 struct cursor_pos saved_cursor; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6843 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6844 saved_cursor = output_cursor; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6845 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6846 /* If window is in the process of being destroyed, don't bother |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6847 to do anything. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6848 if (w->current_matrix == NULL) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6849 goto set_x_cursor; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6850 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6851 /* Recognize when we are called to operate on rows that don't exist |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6852 anymore. This can happen when a window is split. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6853 if (dpyinfo->mouse_face_end_row >= w->current_matrix->nrows) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6854 goto set_x_cursor; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6855 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6856 set_output_cursor (&w->phys_cursor); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6857 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6858 /* Note that mouse_face_beg_row etc. are window relative. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6859 for (i = dpyinfo->mouse_face_beg_row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6860 i <= dpyinfo->mouse_face_end_row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6861 i++) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6862 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6863 int start_hpos, end_hpos, start_x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6864 struct glyph_row *row = MATRIX_ROW (w->current_matrix, i); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6865 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6866 /* Don't do anything if row doesn't have valid contents. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6867 if (!row->enabled_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6868 continue; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6869 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6870 /* For all but the first row, the highlight starts at column 0. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6871 if (i == dpyinfo->mouse_face_beg_row) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6872 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6873 start_hpos = dpyinfo->mouse_face_beg_col; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6874 start_x = dpyinfo->mouse_face_beg_x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6875 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6876 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6877 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6878 start_hpos = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6879 start_x = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6880 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6881 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6882 if (i == dpyinfo->mouse_face_end_row) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6883 end_hpos = dpyinfo->mouse_face_end_col; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6884 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6885 end_hpos = row->used[TEXT_AREA]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6886 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6887 /* If the cursor's in the text we are about to rewrite, turn the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6888 cursor off. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6889 if (!w->pseudo_window_p |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6890 && i == output_cursor.vpos |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6891 && output_cursor.hpos >= start_hpos - 1 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6892 && output_cursor.hpos <= end_hpos) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6893 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6894 x_update_window_cursor (w, 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6895 cursor_off_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6896 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6897 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6898 if (end_hpos > start_hpos) |
26829
4189345a1b5d
(show_mouse_face): Don't use updated_area, use TEXT_AREA.
Gerd Moellmann <gerd@gnu.org>
parents:
26800
diff
changeset
|
6899 x_draw_glyphs (w, start_x, row, TEXT_AREA, |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
6900 start_hpos, end_hpos, draw, NULL, NULL, 0); |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6901 } |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6902 |
6660
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
6903 /* If we turned the cursor off, turn it back on. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6904 if (cursor_off_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6905 x_display_cursor (w, 1, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6906 output_cursor.hpos, output_cursor.vpos, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6907 output_cursor.x, output_cursor.y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6908 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6909 output_cursor = saved_cursor; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6910 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6911 set_x_cursor: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6912 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6913 /* Change the mouse cursor. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6914 if (draw == DRAW_NORMAL_TEXT) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6915 XDefineCursor (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6916 f->output_data.x->text_cursor); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6917 else if (draw == DRAW_MOUSE_FACE) |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
6918 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:
12657
diff
changeset
|
6919 f->output_data.x->cross_cursor); |
6757
770fe370479b
(show_mouse_face): Change the mouse cursor accordingly.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6683
diff
changeset
|
6920 else |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
6921 XDefineCursor (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6922 f->output_data.x->nontext_cursor); |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6923 } |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6924 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6925 /* Clear out the mouse-highlighted active region. |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6926 Redraw it un-highlighted first. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6927 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6928 void |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
6929 clear_mouse_face (dpyinfo) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
6930 struct x_display_info *dpyinfo; |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6931 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6932 if (tip_frame) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6933 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6934 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
6935 if (! NILP (dpyinfo->mouse_face_window)) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6936 show_mouse_face (dpyinfo, DRAW_NORMAL_TEXT); |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
6937 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
6938 dpyinfo->mouse_face_beg_row = dpyinfo->mouse_face_beg_col = -1; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
6939 dpyinfo->mouse_face_end_row = dpyinfo->mouse_face_end_col = -1; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
6940 dpyinfo->mouse_face_window = Qnil; |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6941 } |
16491
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6942 |
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6943 /* Just discard the mouse face information for frame F, if any. |
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6944 This is used when the size of F is changed. */ |
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6945 |
21514 | 6946 void |
16491
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6947 cancel_mouse_face (f) |
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6948 FRAME_PTR f; |
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6949 { |
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6950 Lisp_Object window; |
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6951 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6952 |
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6953 window = dpyinfo->mouse_face_window; |
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6954 if (! NILP (window) && XFRAME (XWINDOW (window)->frame) == f) |
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6955 { |
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6956 dpyinfo->mouse_face_beg_row = dpyinfo->mouse_face_beg_col = -1; |
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6957 dpyinfo->mouse_face_end_row = dpyinfo->mouse_face_end_col = -1; |
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6958 dpyinfo->mouse_face_window = Qnil; |
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6959 } |
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6960 } |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6961 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
6962 static struct scroll_bar *x_window_to_scroll_bar (); |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
6963 static void x_scroll_bar_report_motion (); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6964 |
429 | 6965 /* Return the current position of the mouse. |
11436
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
6966 *fp should be a frame which indicates which display to ask about. |
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
6967 |
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
6968 If the mouse movement started in a scroll bar, set *fp, *bar_window, |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
6969 and *part to the frame, window, and scroll bar part that the mouse |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6970 is over. Set *x and *y to the portion and whole of the mouse's |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
6971 position on the scroll bar. |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6972 |
11436
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
6973 If the mouse movement started elsewhere, set *fp to the frame the |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6974 mouse is on, *bar_window to nil, and *x and *y to the character cell |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6975 the mouse is over. |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6976 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6977 Set *time to the server time-stamp for the time at which the mouse |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6978 was at this position. |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6979 |
3669
fd4187a96445
(XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents:
3639
diff
changeset
|
6980 Don't store anything if we don't have a valid set of values to report. |
fd4187a96445
(XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents:
3639
diff
changeset
|
6981 |
429 | 6982 This clears the mouse_moved flag, so we can wait for the next mouse |
15042
c99dd01d9334
(note_mouse_movement): Don't call XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
14963
diff
changeset
|
6983 movement. */ |
429 | 6984 |
6985 static void | |
11122
ce63fb361ae9
(XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents:
11015
diff
changeset
|
6986 XTmouse_position (fp, insist, bar_window, part, x, y, time) |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
6987 FRAME_PTR *fp; |
11122
ce63fb361ae9
(XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents:
11015
diff
changeset
|
6988 int insist; |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6989 Lisp_Object *bar_window; |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
6990 enum scroll_bar_part *part; |
429 | 6991 Lisp_Object *x, *y; |
732 | 6992 unsigned long *time; |
429 | 6993 { |
3669
fd4187a96445
(XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents:
3639
diff
changeset
|
6994 FRAME_PTR f1; |
fd4187a96445
(XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents:
3639
diff
changeset
|
6995 |
429 | 6996 BLOCK_INPUT; |
6997 | |
20180
bfbf6a2939a3
(XTmouse_position): Handle INSIST < 0.
Karl Heuer <kwzh@gnu.org>
parents:
19447
diff
changeset
|
6998 if (! NILP (last_mouse_scroll_bar) && insist == 0) |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
6999 x_scroll_bar_report_motion (fp, bar_window, part, x, y, time); |
429 | 7000 else |
7001 { | |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7002 Window root; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7003 int root_x, root_y; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7004 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7005 Window dummy_window; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7006 int dummy; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7007 |
12530
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
7008 Lisp_Object frame, tail; |
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
7009 |
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
7010 /* Clear the mouse-moved flag for every frame on this display. */ |
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
7011 FOR_EACH_FRAME (tail, frame) |
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
7012 if (FRAME_X_DISPLAY (XFRAME (frame)) == FRAME_X_DISPLAY (*fp)) |
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
7013 XFRAME (frame)->mouse_moved = 0; |
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
7014 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7015 last_mouse_scroll_bar = Qnil; |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7016 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7017 /* Figure out which root window we're on. */ |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
7018 XQueryPointer (FRAME_X_DISPLAY (*fp), |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
7019 DefaultRootWindow (FRAME_X_DISPLAY (*fp)), |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7020 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7021 /* The root window which contains the pointer. */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7022 &root, |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7023 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7024 /* Trash which we can't trust if the pointer is on |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7025 a different screen. */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7026 &dummy_window, |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7027 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7028 /* The position on that root window. */ |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
7029 &root_x, &root_y, |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7030 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7031 /* More trash we can't trust. */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7032 &dummy, &dummy, |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7033 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7034 /* Modifier keys and pointer buttons, about which |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7035 we don't care. */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7036 (unsigned int *) &dummy); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7037 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7038 /* Now we have a position on the root; find the innermost window |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7039 containing the pointer. */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7040 { |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7041 Window win, child; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7042 int win_x, win_y; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7043 int parent_x = 0, parent_y = 0; |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
7044 int count; |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7045 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7046 win = root; |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7047 |
11436
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
7048 /* XTranslateCoordinates can get errors if the window |
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
7049 structure is changing at the same time this function |
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
7050 is running. So at least we must not crash from them. */ |
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
7051 |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
7052 count = x_catch_errors (FRAME_X_DISPLAY (*fp)); |
11436
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
7053 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
7054 if (FRAME_X_DISPLAY_INFO (*fp)->grabbed && last_mouse_frame |
8430
356e5509efda
(construct_mouse_click, construct_menu_click):
Richard M. Stallman <rms@gnu.org>
parents:
8353
diff
changeset
|
7055 && FRAME_LIVE_P (last_mouse_frame)) |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7056 { |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7057 /* If mouse was grabbed on a frame, give coords for that frame |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7058 even if the mouse is now outside it. */ |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
7059 XTranslateCoordinates (FRAME_X_DISPLAY (*fp), |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7060 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7061 /* From-window, to-window. */ |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7062 root, FRAME_X_WINDOW (last_mouse_frame), |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7063 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7064 /* From-position, to-position. */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7065 root_x, root_y, &win_x, &win_y, |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7066 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7067 /* Child of win. */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7068 &child); |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7069 f1 = last_mouse_frame; |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7070 } |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7071 else |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7072 { |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7073 while (1) |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7074 { |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
7075 XTranslateCoordinates (FRAME_X_DISPLAY (*fp), |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7076 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7077 /* From-window, to-window. */ |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7078 root, win, |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7079 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7080 /* From-position, to-position. */ |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7081 root_x, root_y, &win_x, &win_y, |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7082 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7083 /* Child of win. */ |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7084 &child); |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7085 |
13627
8873aa3451dd
(XTmouse_position): Exit the loop if child == win.
Richard M. Stallman <rms@gnu.org>
parents:
13598
diff
changeset
|
7086 if (child == None || child == win) |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7087 break; |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7088 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7089 win = child; |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7090 parent_x = win_x; |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7091 parent_y = win_y; |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7092 } |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7093 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7094 /* Now we know that: |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7095 win is the innermost window containing the pointer |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7096 (XTC says it has no child containing the pointer), |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7097 win_x and win_y are the pointer's position in it |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7098 (XTC did this the last time through), and |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7099 parent_x and parent_y are the pointer's position in win's parent. |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7100 (They are what win_x and win_y were when win was child. |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7101 If win is the root window, it has no parent, and |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7102 parent_{x,y} are invalid, but that's okay, because we'll |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7103 never use them in that case.) */ |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7104 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7105 /* Is win one of our frames? */ |
11198
571306c7b038
New arg DPYINFO to all callers of x_window_to_frame, x_any_window_to_frame,
Karl Heuer <kwzh@gnu.org>
parents:
11166
diff
changeset
|
7106 f1 = x_any_window_to_frame (FRAME_X_DISPLAY_INFO (*fp), win); |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7107 } |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
7108 |
11436
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
7109 if (x_had_errors_p (FRAME_X_DISPLAY (*fp))) |
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
7110 f1 = 0; |
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
7111 |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
7112 x_uncatch_errors (FRAME_X_DISPLAY (*fp), count); |
11436
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
7113 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7114 /* If not, is it one of our scroll bars? */ |
3669
fd4187a96445
(XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents:
3639
diff
changeset
|
7115 if (! f1) |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7116 { |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7117 struct scroll_bar *bar = x_window_to_scroll_bar (win); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7118 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7119 if (bar) |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7120 { |
3669
fd4187a96445
(XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents:
3639
diff
changeset
|
7121 f1 = XFRAME (WINDOW_FRAME (XWINDOW (bar->window))); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7122 win_x = parent_x; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7123 win_y = parent_y; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7124 } |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7125 } |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7126 |
20180
bfbf6a2939a3
(XTmouse_position): Handle INSIST < 0.
Karl Heuer <kwzh@gnu.org>
parents:
19447
diff
changeset
|
7127 if (f1 == 0 && insist > 0) |
25682
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
7128 f1 = SELECTED_FRAME (); |
11122
ce63fb361ae9
(XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents:
11015
diff
changeset
|
7129 |
3669
fd4187a96445
(XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents:
3639
diff
changeset
|
7130 if (f1) |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7131 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7132 /* Ok, we found a frame. Store all the values. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7133 last_mouse_glyph is a rectangle used to reduce the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7134 generation of mouse events. To not miss any motion |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7135 events, we must divide the frame into rectangles of the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7136 size of the smallest character that could be displayed |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7137 on it, i.e. into the same rectangles that matrices on |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7138 the frame are divided into. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7139 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7140 #if OLD_REDISPLAY_CODE |
6055
a9f61727a90c
(construct_mouse_click): Don't convert to glyph units.
Richard M. Stallman <rms@gnu.org>
parents:
6023
diff
changeset
|
7141 int ignore1, ignore2; |
a9f61727a90c
(construct_mouse_click): Don't convert to glyph units.
Richard M. Stallman <rms@gnu.org>
parents:
6023
diff
changeset
|
7142 pixel_to_glyph_coords (f1, win_x, win_y, &ignore1, &ignore2, |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
7143 &last_mouse_glyph, |
11122
ce63fb361ae9
(XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents:
11015
diff
changeset
|
7144 FRAME_X_DISPLAY_INFO (f1)->grabbed |
ce63fb361ae9
(XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents:
11015
diff
changeset
|
7145 || insist); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7146 #else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7147 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7148 int width = FRAME_SMALLEST_CHAR_WIDTH (f1); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7149 int height = FRAME_SMALLEST_FONT_HEIGHT (f1); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7150 int x = win_x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7151 int y = win_y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7152 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7153 /* Arrange for the division in PIXEL_TO_CHAR_COL etc. to |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7154 round down even for negative values. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7155 if (x < 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7156 x -= width - 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7157 if (y < 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7158 y -= height - 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7159 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7160 last_mouse_glyph.width = width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7161 last_mouse_glyph.height = height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7162 last_mouse_glyph.x = (x + width - 1) / width * width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7163 last_mouse_glyph.y = (y + height - 1) / height * height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7164 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7165 #endif |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7166 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7167 *bar_window = Qnil; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7168 *part = 0; |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
7169 *fp = f1; |
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
7170 XSETINT (*x, win_x); |
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
7171 XSETINT (*y, win_y); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7172 *time = last_mouse_movement_time; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7173 } |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7174 } |
429 | 7175 } |
7176 | |
7177 UNBLOCK_INPUT; | |
7178 } | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7179 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7180 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7181 DEFUN ("xt-process-timeouts", Fxt_process_timeouts, Sxt_process_timeouts, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7182 0, 0, 0, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7183 "Arrange for Xt timeout callbacks to be called.") |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7184 () |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7185 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7186 #ifdef USE_X_TOOLKIT |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7187 BLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7188 while (XtAppPending (Xt_app_con) & XtIMTimer) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7189 XtAppProcessEvent (Xt_app_con, XtIMTimer); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7190 UNBLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7191 #endif /* USE_X_TOOLKIT */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7192 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7193 return Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7194 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7195 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7196 |
429 | 7197 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7198 /* Scroll bar support. */ |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7199 |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7200 /* Given an X window ID, find the struct scroll_bar which manages it. |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7201 This can be called in GC, so we have to make sure to strip off mark |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7202 bits. */ |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7203 static struct scroll_bar * |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7204 x_window_to_scroll_bar (window_id) |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7205 Window window_id; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7206 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7207 Lisp_Object tail; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7208 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7209 for (tail = Vframe_list; |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7210 XGCTYPE (tail) == Lisp_Cons; |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
7211 tail = XCDR (tail)) |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7212 { |
6521
a975c5944916
(x_window_to_scroll_bar, x_new_font): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents:
6413
diff
changeset
|
7213 Lisp_Object frame, bar, condemned; |
a975c5944916
(x_window_to_scroll_bar, x_new_font): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents:
6413
diff
changeset
|
7214 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
7215 frame = XCAR (tail); |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7216 /* All elements of Vframe_list should be frames. */ |
10287
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
7217 if (! GC_FRAMEP (frame)) |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7218 abort (); |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7219 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7220 /* Scan this frame's scroll bar list for a scroll bar with the |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7221 right window ID. */ |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7222 condemned = FRAME_CONDEMNED_SCROLL_BARS (XFRAME (frame)); |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7223 for (bar = FRAME_SCROLL_BARS (XFRAME (frame)); |
1803
5752a95053f2
* xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents:
1793
diff
changeset
|
7224 /* This trick allows us to search both the ordinary and |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7225 condemned scroll bar lists with one loop. */ |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7226 ! GC_NILP (bar) || (bar = condemned, |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7227 condemned = Qnil, |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7228 ! GC_NILP (bar)); |
5825
b1f35db748d8
(x_make_frame_invisible): Add USE_X_TOOLKIT conditional.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5753
diff
changeset
|
7229 bar = XSCROLL_BAR (bar)->next) |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7230 if (SCROLL_BAR_X_WINDOW (XSCROLL_BAR (bar)) == window_id) |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7231 return XSCROLL_BAR (bar); |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7232 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7233 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7234 return 0; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7235 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7236 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7237 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7238 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7239 /************************************************************************ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7240 Toolkit scroll bars |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7241 ************************************************************************/ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7242 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7243 #if USE_TOOLKIT_SCROLL_BARS |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7244 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7245 static void x_scroll_bar_to_input_event P_ ((XEvent *, struct input_event *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7246 static void x_send_scroll_bar_event P_ ((Lisp_Object, int, int, int)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7247 static void x_create_toolkit_scroll_bar P_ ((struct frame *, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7248 struct scroll_bar *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7249 static void x_set_toolkit_scroll_bar_thumb P_ ((struct scroll_bar *, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7250 int, int, int)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7251 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7252 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7253 /* Id of action hook installed for scroll bars. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7254 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7255 static XtActionHookId action_hook_id; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7256 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7257 /* Lisp window being scrolled. Set when starting to interact with |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7258 a toolkit scroll bar, reset to nil when ending the interaction. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7259 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7260 static Lisp_Object window_being_scrolled; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7261 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7262 /* Last scroll bar part sent in xm_scroll_callback. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7263 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7264 static int last_scroll_bar_part; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7265 |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7266 /* Whether this is an Xaw with arrow-scrollbars. This should imply |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7267 that movements of 1/20 of the screen size are mapped to up/down. */ |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7268 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7269 static Boolean xaw3d_arrow_scroll; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7270 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7271 /* Whether the drag scrolling maintains the mouse at the top of the |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7272 thumb. If not, resizing the thumb needs to be done more carefully |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7273 to avoid jerkyness. */ |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7274 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7275 static Boolean xaw3d_pick_top; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7276 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7277 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7278 /* Action hook installed via XtAppAddActionHook when toolkit scroll |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7279 bars are used.. The hook is responsible for detecting when |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7280 the user ends an interaction with the scroll bar, and generates |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7281 a `end-scroll' scroll_bar_click' event if so. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7282 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7283 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7284 xt_action_hook (widget, client_data, action_name, event, params, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7285 num_params) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7286 Widget widget; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7287 XtPointer client_data; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7288 String action_name; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7289 XEvent *event; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7290 String *params; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7291 Cardinal *num_params; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7292 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7293 int scroll_bar_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7294 char *end_action; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7295 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7296 #ifdef USE_MOTIF |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7297 scroll_bar_p = XmIsScrollBar (widget); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7298 end_action = "Release"; |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7299 #else /* !USE_MOTIF i.e. use Xaw */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7300 scroll_bar_p = XtIsSubclass (widget, scrollbarWidgetClass); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7301 end_action = "EndScroll"; |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7302 #endif /* USE_MOTIF */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7303 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7304 /* Although LessTif uses XtTimeouts like Xaw3d, the timer hack to |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7305 let Xt timeouts be processed doesn't work. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7306 if (scroll_bar_p |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7307 && strcmp (action_name, end_action) == 0 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7308 && WINDOWP (window_being_scrolled)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7309 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7310 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7311 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7312 x_send_scroll_bar_event (window_being_scrolled, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7313 scroll_bar_end_scroll, 0, 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7314 w = XWINDOW (window_being_scrolled); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7315 XSCROLL_BAR (w->vertical_scroll_bar)->dragging = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7316 window_being_scrolled = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7317 last_scroll_bar_part = -1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7318 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7319 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7320 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7321 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7322 /* Send a client message with message type Xatom_Scrollbar for a |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7323 scroll action to the frame of WINDOW. PART is a value identifying |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7324 the part of the scroll bar that was clicked on. PORTION is the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7325 amount to scroll of a whole of WHOLE. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7326 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7327 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7328 x_send_scroll_bar_event (window, part, portion, whole) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7329 Lisp_Object window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7330 int part, portion, whole; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7331 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7332 XEvent event; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7333 XClientMessageEvent *ev = (XClientMessageEvent *) &event; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7334 struct frame *f = XFRAME (XWINDOW (window)->frame); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7335 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7336 /* Construct a ClientMessage event to send to the frame. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7337 ev->type = ClientMessage; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7338 ev->message_type = FRAME_X_DISPLAY_INFO (f)->Xatom_Scrollbar; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7339 ev->display = FRAME_X_DISPLAY (f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7340 ev->window = FRAME_X_WINDOW (f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7341 ev->format = 32; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7342 ev->data.l[0] = (long) window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7343 ev->data.l[1] = (long) part; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7344 ev->data.l[2] = (long) 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7345 ev->data.l[3] = (long) portion; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7346 ev->data.l[4] = (long) whole; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7347 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7348 /* Setting the event mask to zero means that the message will |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7349 be sent to the client that created the window, and if that |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7350 window no longer exists, no event will be sent. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7351 BLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7352 XSendEvent (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), False, 0, &event); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7353 UNBLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7354 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7355 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7356 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7357 /* Transform a scroll bar ClientMessage EVENT to an Emacs input event |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7358 in *IEVENT. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7359 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7360 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7361 x_scroll_bar_to_input_event (event, ievent) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7362 XEvent *event; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7363 struct input_event *ievent; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7364 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7365 XClientMessageEvent *ev = (XClientMessageEvent *) event; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7366 Lisp_Object window = (Lisp_Object) ev->data.l[0]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7367 struct frame *f = XFRAME (XWINDOW (window)->frame); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7368 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7369 ievent->kind = scroll_bar_click; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7370 ievent->frame_or_window = window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7371 ievent->timestamp = XtLastTimestampProcessed (FRAME_X_DISPLAY (f)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7372 ievent->part = ev->data.l[1]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7373 ievent->code = ev->data.l[2]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7374 ievent->x = make_number ((int) ev->data.l[3]); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7375 ievent->y = make_number ((int) ev->data.l[4]); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7376 ievent->modifiers = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7377 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7378 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7379 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7380 #ifdef USE_MOTIF |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7381 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7382 /* Minimum and maximum values used for Motif scroll bars. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7383 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7384 #define XM_SB_MIN 1 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7385 #define XM_SB_MAX 10000000 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7386 #define XM_SB_RANGE (XM_SB_MAX - XM_SB_MIN) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7387 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7388 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7389 /* Scroll bar callback for Motif scroll bars. WIDGET is the scroll |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7390 bar widget. CLIENT_DATA is a pointer to the scroll_bar structure. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7391 CALL_DATA is a pointer a a XmScrollBarCallbackStruct. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7392 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7393 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7394 xm_scroll_callback (widget, client_data, call_data) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7395 Widget widget; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7396 XtPointer client_data, call_data; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7397 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7398 struct scroll_bar *bar = (struct scroll_bar *) client_data; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7399 XmScrollBarCallbackStruct *cs = (XmScrollBarCallbackStruct *) call_data; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7400 double percent; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7401 int part = -1, whole = 0, portion = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7402 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7403 switch (cs->reason) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7404 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7405 case XmCR_DECREMENT: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7406 bar->dragging = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7407 part = scroll_bar_up_arrow; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7408 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7409 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7410 case XmCR_INCREMENT: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7411 bar->dragging = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7412 part = scroll_bar_down_arrow; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7413 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7414 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7415 case XmCR_PAGE_DECREMENT: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7416 bar->dragging = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7417 part = scroll_bar_above_handle; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7418 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7419 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7420 case XmCR_PAGE_INCREMENT: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7421 bar->dragging = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7422 part = scroll_bar_below_handle; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7423 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7424 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7425 case XmCR_TO_TOP: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7426 bar->dragging = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7427 part = scroll_bar_to_top; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7428 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7429 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7430 case XmCR_TO_BOTTOM: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7431 bar->dragging = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7432 part = scroll_bar_to_bottom; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7433 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7434 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7435 case XmCR_DRAG: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7436 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7437 int slider_size; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7438 int dragging_down_p = (INTEGERP (bar->dragging) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7439 && XINT (bar->dragging) <= cs->value); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7440 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7441 /* Get the slider size. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7442 BLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7443 XtVaGetValues (widget, XmNsliderSize, &slider_size, NULL); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7444 UNBLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7445 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7446 /* At the max position of the scroll bar, do a line-wise |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7447 movement. Without doing anything, the LessTif scroll bar |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7448 calls us with the same cs->value again and again. If we |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7449 want to make sure that we can reach the end of the buffer, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7450 we have to do something. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7451 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7452 Implementation note: setting bar->dragging always to |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7453 cs->value gives a smoother movement at the max position. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7454 Setting it to nil when doing line-wise movement gives |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7455 a better slider behavior. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7456 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7457 if (cs->value + slider_size == XM_SB_MAX |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7458 || (dragging_down_p |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7459 && last_scroll_bar_part == scroll_bar_down_arrow)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7460 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7461 part = scroll_bar_down_arrow; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7462 bar->dragging = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7463 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7464 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7465 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7466 whole = XM_SB_RANGE; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7467 portion = min (cs->value - XM_SB_MIN, XM_SB_MAX - slider_size); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7468 part = scroll_bar_handle; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7469 bar->dragging = make_number (cs->value); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7470 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7471 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7472 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7473 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7474 case XmCR_VALUE_CHANGED: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7475 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7476 }; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7477 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7478 if (part >= 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7479 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7480 window_being_scrolled = bar->window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7481 last_scroll_bar_part = part; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7482 x_send_scroll_bar_event (bar->window, part, portion, whole); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7483 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7484 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7485 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7486 |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7487 #else /* !USE_MOTIF, i.e. Xaw. */ |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7488 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7489 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7490 /* Xaw scroll bar callback. Invoked when the thumb is dragged. |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7491 WIDGET is the scroll bar widget. CLIENT_DATA is a pointer to the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7492 scroll bar struct. CALL_DATA is a pointer to a float saying where |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7493 the thumb is. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7494 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7495 static void |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7496 xaw_jump_callback (widget, client_data, call_data) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7497 Widget widget; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7498 XtPointer client_data, call_data; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7499 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7500 struct scroll_bar *bar = (struct scroll_bar *) client_data; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7501 float top = *(float *) call_data; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7502 float shown; |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7503 int whole, portion, height; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7504 int part; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7505 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7506 /* Get the size of the thumb, a value between 0 and 1. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7507 BLOCK_INPUT; |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7508 XtVaGetValues (widget, XtNshown, &shown, XtNheight, &height, NULL); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7509 UNBLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7510 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7511 whole = 10000000; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7512 portion = shown < 1 ? top * whole : 0; |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7513 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7514 if (shown < 1 && (abs (top + shown - 1) < 1.0/height)) |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7515 /* Some derivatives of Xaw refuse to shrink the thumb when you reach |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7516 the bottom, so we force the scrolling whenever we see that we're |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7517 too close to the bottom (in x_set_toolkit_scroll_bar_thumb |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7518 we try to ensure that we always stay two pixels away from the |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7519 bottom). */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7520 part = scroll_bar_down_arrow; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7521 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7522 part = scroll_bar_handle; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7523 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7524 window_being_scrolled = bar->window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7525 bar->dragging = make_number (portion); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7526 last_scroll_bar_part = part; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7527 x_send_scroll_bar_event (bar->window, part, portion, whole); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7528 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7529 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7530 |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7531 /* Xaw scroll bar callback. Invoked for incremental scrolling., |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7532 i.e. line or page up or down. WIDGET is the Xaw scroll bar |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7533 widget. CLIENT_DATA is a pointer to the scroll_bar structure for |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7534 the scroll bar. CALL_DATA is an integer specifying the action that |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7535 has taken place. It's magnitude is in the range 0..height of the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7536 scroll bar. Negative values mean scroll towards buffer start. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7537 Values < height of scroll bar mean line-wise movement. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7538 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7539 static void |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7540 xaw_scroll_callback (widget, client_data, call_data) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7541 Widget widget; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7542 XtPointer client_data, call_data; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7543 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7544 struct scroll_bar *bar = (struct scroll_bar *) client_data; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7545 int position = (int) call_data; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7546 Dimension height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7547 int part; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7548 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7549 /* Get the height of the scroll bar. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7550 BLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7551 XtVaGetValues (widget, XtNheight, &height, NULL); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7552 UNBLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7553 |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7554 if (abs (position) >= height) |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7555 part = (position < 0) ? scroll_bar_above_handle : scroll_bar_below_handle; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7556 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7557 /* If Xaw3d was compiled with ARROW_SCROLLBAR, |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7558 it maps line-movement to call_data = max(5, height/20). */ |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7559 else if (xaw3d_arrow_scroll && abs (position) <= max (5, height / 20)) |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7560 part = (position < 0) ? scroll_bar_up_arrow : scroll_bar_down_arrow; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7561 else |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7562 part = scroll_bar_move_ratio; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7563 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7564 window_being_scrolled = bar->window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7565 bar->dragging = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7566 last_scroll_bar_part = part; |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7567 x_send_scroll_bar_event (bar->window, part, position, height); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7568 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7569 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7570 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7571 #endif /* not USE_MOTIF */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7572 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7573 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7574 /* Create the widget for scroll bar BAR on frame F. Record the widget |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7575 and X window of the scroll bar in BAR. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7576 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7577 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7578 x_create_toolkit_scroll_bar (f, bar) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7579 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7580 struct scroll_bar *bar; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7581 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7582 Window xwindow; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7583 Widget widget; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7584 Arg av[20]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7585 int ac = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7586 char *scroll_bar_name = "verticalScrollBar"; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7587 unsigned long pixel; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7588 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7589 BLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7590 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7591 #ifdef USE_MOTIF |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7592 /* LessTif 0.85, problems: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7593 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7594 1. When the mouse if over the scroll bar, the scroll bar will |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7595 get keyboard events. I didn't find a way to turn this off. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7596 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7597 2. Do we have to explicitly set the cursor to get an arrow |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7598 cursor (see below)? */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7599 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7600 /* Set resources. Create the widget. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7601 XtSetArg (av[ac], XtNmappedWhenManaged, False); ++ac; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7602 XtSetArg (av[ac], XmNminimum, XM_SB_MIN); ++ac; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7603 XtSetArg (av[ac], XmNmaximum, XM_SB_MAX); ++ac; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7604 XtSetArg (av[ac], XmNorientation, XmVERTICAL); ++ac; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7605 XtSetArg (av[ac], XmNprocessingDirection, XmMAX_ON_BOTTOM), ++ac; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7606 XtSetArg (av[ac], XmNincrement, 1); ++ac; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7607 XtSetArg (av[ac], XmNpageIncrement, 1); ++ac; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7608 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7609 pixel = f->output_data.x->scroll_bar_foreground_pixel; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7610 if (pixel != -1) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7611 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7612 XtSetArg (av[ac], XmNforeground, pixel); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7613 ++ac; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7614 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7615 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7616 pixel = f->output_data.x->scroll_bar_background_pixel; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7617 if (pixel != -1) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7618 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7619 XtSetArg (av[ac], XmNbackground, pixel); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7620 ++ac; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7621 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7622 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7623 widget = XmCreateScrollBar (f->output_data.x->edit_widget, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7624 scroll_bar_name, av, ac); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7625 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7626 /* Add one callback for everything that can happen. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7627 XtAddCallback (widget, XmNdecrementCallback, xm_scroll_callback, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7628 (XtPointer) bar); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7629 XtAddCallback (widget, XmNdragCallback, xm_scroll_callback, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7630 (XtPointer) bar); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7631 XtAddCallback (widget, XmNincrementCallback, xm_scroll_callback, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7632 (XtPointer) bar); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7633 XtAddCallback (widget, XmNpageDecrementCallback, xm_scroll_callback, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7634 (XtPointer) bar); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7635 XtAddCallback (widget, XmNpageIncrementCallback, xm_scroll_callback, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7636 (XtPointer) bar); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7637 XtAddCallback (widget, XmNtoBottomCallback, xm_scroll_callback, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7638 (XtPointer) bar); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7639 XtAddCallback (widget, XmNtoTopCallback, xm_scroll_callback, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7640 (XtPointer) bar); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7641 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7642 /* Realize the widget. Only after that is the X window created. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7643 XtRealizeWidget (widget); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7644 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7645 /* Set the cursor to an arrow. I didn't find a resource to do that. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7646 And I'm wondering why it hasn't an arrow cursor by default. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7647 XDefineCursor (XtDisplay (widget), XtWindow (widget), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7648 f->output_data.x->nontext_cursor); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7649 |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7650 #else /* !USE_MOTIF i.e. use Xaw */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7651 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7652 /* Set resources. Create the widget. The background of the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7653 Xaw3d scroll bar widget is a little bit light for my taste. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7654 We don't alter it here to let users change it according |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7655 to their taste with `emacs*verticalScrollBar.background: xxx'. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7656 XtSetArg (av[ac], XtNmappedWhenManaged, False); ++ac; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7657 XtSetArg (av[ac], XtNorientation, XtorientVertical); ++ac; |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7658 /* For smoother scrolling with Xaw3d -sm */ |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7659 /* XtSetArg (av[ac], XtNpickTop, True); ++ac; */ |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7660 /* XtSetArg (av[ac], XtNbeNiceToColormap, True); ++ac; */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7661 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7662 pixel = f->output_data.x->scroll_bar_foreground_pixel; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7663 if (pixel != -1) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7664 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7665 XtSetArg (av[ac], XtNforeground, pixel); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7666 ++ac; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7667 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7668 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7669 pixel = f->output_data.x->scroll_bar_background_pixel; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7670 if (pixel != -1) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7671 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7672 XtSetArg (av[ac], XtNbackground, pixel); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7673 ++ac; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7674 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7675 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7676 widget = XtCreateWidget (scroll_bar_name, scrollbarWidgetClass, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7677 f->output_data.x->edit_widget, av, ac); |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7678 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7679 { |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7680 char *initial = ""; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7681 char *val = initial; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7682 XtVaGetValues (widget, XtNscrollVCursor, (XtPointer) &val, |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7683 XtNpickTop, (XtPointer) &xaw3d_pick_top, NULL); |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7684 if (val == initial) |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7685 { /* ARROW_SCROLL */ |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7686 xaw3d_arrow_scroll = True; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7687 /* Isn't that just a personal preference ? -sm */ |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7688 XtVaSetValues (widget, XtNcursorName, "top_left_arrow", NULL); |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7689 } |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7690 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7691 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7692 /* Define callbacks. */ |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7693 XtAddCallback (widget, XtNjumpProc, xaw_jump_callback, (XtPointer) bar); |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7694 XtAddCallback (widget, XtNscrollProc, xaw_scroll_callback, |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7695 (XtPointer) bar); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7696 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7697 /* Realize the widget. Only after that is the X window created. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7698 XtRealizeWidget (widget); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7699 |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7700 #endif /* !USE_MOTIF */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7701 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7702 /* Install an action hook that let's us detect when the user |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7703 finishes interacting with a scroll bar. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7704 if (action_hook_id == 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7705 action_hook_id = XtAppAddActionHook (Xt_app_con, xt_action_hook, 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7706 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7707 /* Remember X window and widget in the scroll bar vector. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7708 SET_SCROLL_BAR_X_WIDGET (bar, widget); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7709 xwindow = XtWindow (widget); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7710 SET_SCROLL_BAR_X_WINDOW (bar, xwindow); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7711 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7712 UNBLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7713 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7714 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7715 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7716 /* Set the thumb size and position of scroll bar BAR. We are currently |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7717 displaying PORTION out of a whole WHOLE, and our position POSITION. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7718 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7719 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7720 x_set_toolkit_scroll_bar_thumb (bar, portion, position, whole) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7721 struct scroll_bar *bar; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7722 int portion, position, whole; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7723 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7724 float top, shown; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7725 Widget widget = SCROLL_BAR_X_WIDGET (bar); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7726 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7727 if (whole == 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7728 top = 0, shown = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7729 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7730 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7731 top = (float) position / whole; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7732 shown = (float) portion / whole; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7733 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7734 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7735 BLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7736 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7737 #ifdef USE_MOTIF |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7738 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7739 int size, value; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7740 Boolean arrow1_selected, arrow2_selected; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7741 unsigned char flags; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7742 XmScrollBarWidget sb; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7743 |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7744 /* Slider size. Must be in the range [1 .. MAX - MIN] where MAX |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7745 is the scroll bar's maximum and MIN is the scroll bar's minimum |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7746 value. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7747 size = shown * XM_SB_RANGE; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7748 size = min (size, XM_SB_RANGE); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7749 size = max (size, 1); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7750 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7751 /* Position. Must be in the range [MIN .. MAX - SLIDER_SIZE]. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7752 value = top * XM_SB_RANGE; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7753 value = min (value, XM_SB_MAX - size); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7754 value = max (value, XM_SB_MIN); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7755 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7756 /* LessTif: Calling XmScrollBarSetValues after an increment or |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7757 decrement turns off auto-repeat LessTif-internally. This can |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7758 be seen in ScrollBar.c which resets Arrow1Selected and |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7759 Arrow2Selected. It also sets internal flags so that LessTif |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7760 believes the mouse is in the slider. We either have to change |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7761 our code, or work around that by accessing private data. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7762 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7763 sb = (XmScrollBarWidget) widget; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7764 arrow1_selected = sb->scrollBar.arrow1_selected; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7765 arrow2_selected = sb->scrollBar.arrow2_selected; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7766 flags = sb->scrollBar.flags; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7767 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7768 if (NILP (bar->dragging)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7769 XmScrollBarSetValues (widget, value, size, 0, 0, False); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7770 else if (last_scroll_bar_part == scroll_bar_down_arrow) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7771 /* This has the negative side effect that the slider value is |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7772 not what it would be if we scrolled here using line-wise or |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7773 page-wise movement. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7774 XmScrollBarSetValues (widget, value, XM_SB_RANGE - value, 0, 0, False); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7775 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7776 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7777 /* If currently dragging, only update the slider size. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7778 This reduces flicker effects. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7779 int old_value, old_size, increment, page_increment; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7780 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7781 XmScrollBarGetValues (widget, &old_value, &old_size, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7782 &increment, &page_increment); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7783 XmScrollBarSetValues (widget, old_value, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7784 min (size, XM_SB_RANGE - old_value), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7785 0, 0, False); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7786 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7787 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7788 sb->scrollBar.arrow1_selected = arrow1_selected; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7789 sb->scrollBar.arrow2_selected = arrow2_selected; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7790 sb->scrollBar.flags = flags; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7791 } |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7792 #else /* !USE_MOTIF i.e. use Xaw */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7793 { |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7794 float old_top, old_shown; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7795 Dimension height; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7796 XtVaGetValues (widget, |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7797 XtNtopOfThumb, &old_top, |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7798 XtNshown, &old_shown, |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7799 XtNheight, &height, |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7800 NULL); |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7801 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7802 /* Massage the top+shown values. */ |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7803 if (NILP (bar->dragging) || last_scroll_bar_part == scroll_bar_down_arrow) |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7804 top = max (0, min (1, top)); |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7805 else |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7806 top = old_top; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7807 /* Keep two pixels available for moving the thumb down. */ |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7808 shown = max (0, min (1 - top - (2.0 / height), shown)); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7809 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7810 /* If the call to XawScrollbarSetThumb below doesn't seem to work, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7811 check that your system's configuration file contains a define |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7812 for `NARROWPROTO'. See s/freebsd.h for an example. */ |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7813 if (top != old_top || shown != old_shown) |
25101
6b42357f28f9
(x_set_toolkit_scroll_bar_thumb): Fix previous change.
Gerd Moellmann <gerd@gnu.org>
parents:
25091
diff
changeset
|
7814 { |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7815 if (NILP (bar->dragging)) |
25101
6b42357f28f9
(x_set_toolkit_scroll_bar_thumb): Fix previous change.
Gerd Moellmann <gerd@gnu.org>
parents:
25091
diff
changeset
|
7816 XawScrollbarSetThumb (widget, top, shown); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7817 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7818 { |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7819 #ifdef HAVE_XAW3D |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7820 ScrollbarWidget sb = (ScrollbarWidget) widget; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7821 int scroll_mode; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7822 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7823 /* `scroll_mode' only exists with Xaw3d + ARROW_SCROLLBAR. */ |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7824 if (xaw3d_arrow_scroll) |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7825 { |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7826 /* Xaw3d stupidly ignores resize requests while dragging |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7827 so we have to make it believe it's not in dragging mode. */ |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7828 scroll_mode = sb->scrollbar.scroll_mode; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7829 if (scroll_mode == 2) |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7830 sb->scrollbar.scroll_mode = 0; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7831 } |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7832 #endif |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7833 /* Try to make the scrolling a tad smoother. */ |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7834 if (!xaw3d_pick_top) |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7835 shown = min (shown, old_shown); |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7836 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7837 XawScrollbarSetThumb (widget, top, shown); |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7838 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7839 #ifdef HAVE_XAW3D |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7840 if (xaw3d_arrow_scroll && scroll_mode == 2) |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7841 sb->scrollbar.scroll_mode = scroll_mode; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7842 #endif |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7843 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7844 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7845 } |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7846 #endif /* !USE_MOTIF */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7847 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7848 UNBLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7849 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7850 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7851 #endif /* USE_TOOLKIT_SCROLL_BARS */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7852 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7853 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7854 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7855 /************************************************************************ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7856 Scroll bars, general |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7857 ************************************************************************/ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7858 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7859 /* Create a scroll bar and return the scroll bar vector for it. W is |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7860 the Emacs window on which to create the scroll bar. TOP, LEFT, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7861 WIDTH and HEIGHT are.the pixel coordinates and dimensions of the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7862 scroll bar. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7863 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7864 static struct scroll_bar * |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7865 x_scroll_bar_create (w, top, left, width, height) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7866 struct window *w; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7867 int top, left, width, height; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7868 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7869 struct frame *f = XFRAME (w->frame); |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
7870 struct scroll_bar *bar |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
7871 = XSCROLL_BAR (Fmake_vector (make_number (SCROLL_BAR_VEC_SIZE), Qnil)); |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7872 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7873 BLOCK_INPUT; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7874 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7875 #if USE_TOOLKIT_SCROLL_BARS |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7876 x_create_toolkit_scroll_bar (f, bar); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7877 #else /* not USE_TOOLKIT_SCROLL_BARS */ |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7878 { |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7879 XSetWindowAttributes a; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7880 unsigned long mask; |
25716
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
7881 Window window; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7882 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7883 a.background_pixel = f->output_data.x->scroll_bar_background_pixel; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7884 if (a.background_pixel == -1) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7885 a.background_pixel = f->output_data.x->background_pixel; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7886 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7887 a.event_mask = (ButtonPressMask | ButtonReleaseMask |
1793
cf4c3f01ddb9
* xterm.c (x_scrollbar_create): Include PointerMotionHintMask in
Jim Blandy <jimb@redhat.com>
parents:
1787
diff
changeset
|
7888 | ButtonMotionMask | PointerMotionHintMask |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7889 | ExposureMask); |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
7890 a.cursor = FRAME_X_DISPLAY_INFO (f)->vertical_scroll_bar_cursor; |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
7891 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
7892 mask = (CWBackPixel | CWEventMask | CWCursor); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7893 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7894 /* Clear the area of W that will serve as a scroll bar. This is |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7895 for the case that a window has been split horizontally. In |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7896 this case, no clear_frame is generated to reduce flickering. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7897 XClearArea (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7898 left, top, width, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7899 window_box_height (w), False); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7900 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7901 window = XCreateWindow (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7902 /* Position and size of scroll bar. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7903 left + VERTICAL_SCROLL_BAR_WIDTH_TRIM, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7904 top, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7905 width - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7906 height, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7907 /* Border width, depth, class, and visual. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7908 0, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7909 CopyFromParent, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7910 CopyFromParent, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7911 CopyFromParent, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7912 /* Attributes. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7913 mask, &a); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7914 SET_SCROLL_BAR_X_WINDOW (bar, window); |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7915 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7916 #endif /* not USE_TOOLKIT_SCROLL_BARS */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7917 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7918 XSETWINDOW (bar->window, w); |
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
7919 XSETINT (bar->top, top); |
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
7920 XSETINT (bar->left, left); |
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
7921 XSETINT (bar->width, width); |
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
7922 XSETINT (bar->height, height); |
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
7923 XSETINT (bar->start, 0); |
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
7924 XSETINT (bar->end, 0); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7925 bar->dragging = Qnil; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7926 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7927 /* Add bar to its frame's list of scroll bars. */ |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
7928 bar->next = FRAME_SCROLL_BARS (f); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7929 bar->prev = Qnil; |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
7930 XSETVECTOR (FRAME_SCROLL_BARS (f), bar); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7931 if (!NILP (bar->next)) |
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
7932 XSETVECTOR (XSCROLL_BAR (bar->next)->prev, bar); |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7933 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7934 /* Map the window/widget. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7935 #if USE_TOOLKIT_SCROLL_BARS |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7936 XtMapWidget (SCROLL_BAR_X_WIDGET (bar)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7937 XtConfigureWidget (SCROLL_BAR_X_WIDGET (bar), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7938 left + VERTICAL_SCROLL_BAR_WIDTH_TRIM, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7939 top, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7940 width - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7941 height, 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7942 #else /* not USE_TOOLKIT_SCROLL_BARS */ |
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
7943 XMapRaised (FRAME_X_DISPLAY (f), SCROLL_BAR_X_WINDOW (bar)); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7944 #endif /* not USE_TOOLKIT_SCROLL_BARS */ |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7945 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7946 UNBLOCK_INPUT; |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7947 return bar; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7948 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7949 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7950 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7951 /* Draw BAR's handle in the proper position. |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7952 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7953 If the handle is already drawn from START to END, don't bother |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7954 redrawing it, unless REBUILD is non-zero; in that case, always |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7955 redraw it. (REBUILD is handy for drawing the handle after expose |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
7956 events.) |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7957 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7958 Normally, we want to constrain the start and end of the handle to |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7959 fit inside its rectangle, but if the user is dragging the scroll |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7960 bar handle, we want to let them drag it down all the way, so that |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7961 the bar's top is as far down as it goes; otherwise, there's no way |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7962 to move to the very end of the buffer. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7963 |
25716
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
7964 #ifndef USE_TOOLKIT_SCROLL_BARS |
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
7965 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7966 static void |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7967 x_scroll_bar_set_handle (bar, start, end, rebuild) |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7968 struct scroll_bar *bar; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7969 int start, end; |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7970 int rebuild; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7971 { |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7972 int dragging = ! NILP (bar->dragging); |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7973 Window w = SCROLL_BAR_X_WINDOW (bar); |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
7974 FRAME_PTR f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window))); |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
7975 GC gc = f->output_data.x->normal_gc; |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7976 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7977 /* If the display is already accurate, do nothing. */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7978 if (! rebuild |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7979 && start == XINT (bar->start) |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7980 && end == XINT (bar->end)) |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7981 return; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7982 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7983 BLOCK_INPUT; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7984 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7985 { |
16251
ec1b1ae37295
Pass frame arg in calls to VERTICAL_SCROLL_BAR_INSIDE_HEIGHT
Richard M. Stallman <rms@gnu.org>
parents:
16220
diff
changeset
|
7986 int inside_width = VERTICAL_SCROLL_BAR_INSIDE_WIDTH (f, XINT (bar->width)); |
ec1b1ae37295
Pass frame arg in calls to VERTICAL_SCROLL_BAR_INSIDE_HEIGHT
Richard M. Stallman <rms@gnu.org>
parents:
16220
diff
changeset
|
7987 int inside_height = VERTICAL_SCROLL_BAR_INSIDE_HEIGHT (f, XINT (bar->height)); |
ec1b1ae37295
Pass frame arg in calls to VERTICAL_SCROLL_BAR_INSIDE_HEIGHT
Richard M. Stallman <rms@gnu.org>
parents:
16220
diff
changeset
|
7988 int top_range = VERTICAL_SCROLL_BAR_TOP_RANGE (f, XINT (bar->height)); |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7989 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7990 /* Make sure the values are reasonable, and try to preserve |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7991 the distance between start and end. */ |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7992 { |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7993 int length = end - start; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7994 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7995 if (start < 0) |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7996 start = 0; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7997 else if (start > top_range) |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7998 start = top_range; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7999 end = start + length; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8000 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8001 if (end < start) |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8002 end = start; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8003 else if (end > top_range && ! dragging) |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8004 end = top_range; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8005 } |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8006 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8007 /* Store the adjusted setting in the scroll bar. */ |
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
8008 XSETINT (bar->start, start); |
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
8009 XSETINT (bar->end, end); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8010 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8011 /* Clip the end position, just for display. */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8012 if (end > top_range) |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8013 end = top_range; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8014 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8015 /* Draw bottom positions VERTICAL_SCROLL_BAR_MIN_HANDLE pixels |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8016 below top positions, to make sure the handle is always at least |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8017 that many pixels tall. */ |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8018 end += VERTICAL_SCROLL_BAR_MIN_HANDLE; |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8019 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8020 /* Draw the empty space above the handle. Note that we can't clear |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8021 zero-height areas; that means "clear to end of window." */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8022 if (0 < start) |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
8023 XClearArea (FRAME_X_DISPLAY (f), w, |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8024 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8025 /* x, y, width, height, and exposures. */ |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8026 VERTICAL_SCROLL_BAR_LEFT_BORDER, |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8027 VERTICAL_SCROLL_BAR_TOP_BORDER, |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8028 inside_width, start, |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8029 False); |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8030 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8031 /* Change to proper foreground color if one is specified. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8032 if (f->output_data.x->scroll_bar_foreground_pixel != -1) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8033 XSetForeground (FRAME_X_DISPLAY (f), gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8034 f->output_data.x->scroll_bar_foreground_pixel); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8035 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8036 /* Draw the handle itself. */ |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
8037 XFillRectangle (FRAME_X_DISPLAY (f), w, gc, |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8038 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8039 /* x, y, width, height */ |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8040 VERTICAL_SCROLL_BAR_LEFT_BORDER, |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8041 VERTICAL_SCROLL_BAR_TOP_BORDER + start, |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8042 inside_width, end - start); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8043 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8044 /* Restore the foreground color of the GC if we changed it above. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8045 if (f->output_data.x->scroll_bar_foreground_pixel != -1) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8046 XSetForeground (FRAME_X_DISPLAY (f), gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8047 f->output_data.x->foreground_pixel); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8048 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8049 /* Draw the empty space below the handle. Note that we can't |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8050 clear zero-height areas; that means "clear to end of window." */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8051 if (end < inside_height) |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
8052 XClearArea (FRAME_X_DISPLAY (f), w, |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8053 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8054 /* x, y, width, height, and exposures. */ |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8055 VERTICAL_SCROLL_BAR_LEFT_BORDER, |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8056 VERTICAL_SCROLL_BAR_TOP_BORDER + end, |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8057 inside_width, inside_height - end, |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8058 False); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8059 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8060 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8061 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8062 UNBLOCK_INPUT; |
25716
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
8063 } |
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
8064 |
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
8065 #endif /* !USE_TOOLKIT_SCROLL_BARS */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8066 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8067 /* Destroy scroll bar BAR, and set its Emacs window's scroll bar to |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8068 nil. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8069 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8070 static void |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8071 x_scroll_bar_remove (bar) |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8072 struct scroll_bar *bar; |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8073 { |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8074 BLOCK_INPUT; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8075 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8076 #if USE_TOOLKIT_SCROLL_BARS |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8077 XtDestroyWidget (SCROLL_BAR_X_WIDGET (bar)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8078 #else /* not USE_TOOLKIT_SCROLL_BARS */ |
25716
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
8079 { |
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
8080 FRAME_PTR f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window))); |
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
8081 XDestroyWindow (FRAME_X_DISPLAY (f), SCROLL_BAR_X_WINDOW (bar)); |
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
8082 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8083 #endif /* not USE_TOOLKIT_SCROLL_BARS */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8084 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8085 /* Disassociate this scroll bar from its window. */ |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8086 XWINDOW (bar->window)->vertical_scroll_bar = Qnil; |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8087 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8088 UNBLOCK_INPUT; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8089 } |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8090 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8091 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8092 /* Set the handle of the vertical scroll bar for WINDOW to indicate |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8093 that we are displaying PORTION characters out of a total of WHOLE |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8094 characters, starting at POSITION. If WINDOW has no scroll bar, |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8095 create one. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8096 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8097 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8098 XTset_vertical_scroll_bar (w, portion, whole, position) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8099 struct window *w; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8100 int portion, whole, position; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8101 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8102 struct frame *f = XFRAME (w->frame); |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8103 struct scroll_bar *bar; |
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8104 int top, height, left, sb_left, width, sb_width; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8105 int window_x, window_y, window_width, window_height; |
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8106 |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8107 /* Get window dimensions. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8108 window_box (w, -1, &window_x, &window_y, &window_width, &window_height); |
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8109 top = window_y; |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8110 width = FRAME_SCROLL_BAR_COLS (f) * CANON_X_UNIT (f); |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8111 height = window_height; |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8112 |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8113 /* Compute the left edge of the scroll bar area. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8114 if (FRAME_HAS_VERTICAL_SCROLL_BARS_ON_RIGHT (f)) |
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8115 left = XINT (w->left) + XINT (w->width) - FRAME_SCROLL_BAR_COLS (f); |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8116 else |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8117 left = XFASTINT (w->left); |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8118 left *= CANON_X_UNIT (f); |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8119 left += FRAME_INTERNAL_BORDER_WIDTH (f); |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8120 |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8121 /* Compute the width of the scroll bar which might be less than |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8122 the width of the area reserved for the scroll bar. */ |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8123 if (FRAME_SCROLL_BAR_PIXEL_WIDTH (f) > 0) |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8124 sb_width = FRAME_SCROLL_BAR_PIXEL_WIDTH (f); |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8125 else |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8126 sb_width = width; |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8127 |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8128 /* Compute the left edge of the scroll bar. */ |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8129 #ifdef USE_TOOLKIT_SCROLL_BARS |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8130 if (FRAME_HAS_VERTICAL_SCROLL_BARS_ON_RIGHT (f)) |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8131 sb_left = left + width - sb_width - (width - sb_width) / 2; |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8132 else |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8133 sb_left = left + (width - sb_width) / 2; |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8134 #else |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8135 if (FRAME_HAS_VERTICAL_SCROLL_BARS_ON_RIGHT (f)) |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8136 sb_left = left + width - sb_width; |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8137 else |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8138 sb_left = left; |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8139 #endif |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8140 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8141 /* Does the scroll bar exist yet? */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8142 if (NILP (w->vertical_scroll_bar)) |
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8143 { |
25529
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
8144 BLOCK_INPUT; |
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8145 XClearArea (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8146 left, top, width, height, False); |
25529
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
8147 UNBLOCK_INPUT; |
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8148 bar = x_scroll_bar_create (w, top, sb_left, sb_width, height); |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8149 } |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8150 else |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8151 { |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8152 /* It may just need to be moved and resized. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8153 unsigned int mask = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8154 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8155 bar = XSCROLL_BAR (w->vertical_scroll_bar); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8156 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8157 BLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8158 |
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8159 if (sb_left != XINT (bar->left)) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8160 mask |= CWX; |
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8161 if (top != XINT (bar->top)) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8162 mask |= CWY; |
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8163 if (sb_width != XINT (bar->width)) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8164 mask |= CWWidth; |
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8165 if (height != XINT (bar->height)) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8166 mask |= CWHeight; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8167 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8168 #ifdef USE_TOOLKIT_SCROLL_BARS |
25269
621067279f19
(XTset_vertical_scroll_bar) [USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents:
25191
diff
changeset
|
8169 |
621067279f19
(XTset_vertical_scroll_bar) [USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents:
25191
diff
changeset
|
8170 /* Since toolkit scroll bars are smaller than the space reserved |
621067279f19
(XTset_vertical_scroll_bar) [USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents:
25191
diff
changeset
|
8171 for them on the frame, we have to clear "under" them. */ |
621067279f19
(XTset_vertical_scroll_bar) [USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents:
25191
diff
changeset
|
8172 XClearArea (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8173 left, top, width, height, False); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8174 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8175 /* Move/size the scroll bar widget. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8176 if (mask) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8177 XtConfigureWidget (SCROLL_BAR_X_WIDGET (bar), |
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8178 sb_left + VERTICAL_SCROLL_BAR_WIDTH_TRIM, |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8179 top, |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8180 sb_width - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2, |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8181 height, 0); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8182 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8183 #else /* not USE_TOOLKIT_SCROLL_BARS */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8184 |
25633
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8185 if (VERTICAL_SCROLL_BAR_WIDTH_TRIM) |
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8186 { |
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8187 /* Clear areas not covered by the scroll bar. This makes sure a |
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8188 previous mode line display is cleared after C-x 2 C-x 1, for |
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8189 example. Non-toolkit scroll bars are as wide as the area |
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8190 reserved for scroll bars - trim at both sides. */ |
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8191 XClearArea (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8192 left, top, VERTICAL_SCROLL_BAR_WIDTH_TRIM, |
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8193 height, False); |
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8194 XClearArea (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8195 left + width - VERTICAL_SCROLL_BAR_WIDTH_TRIM, |
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8196 top, VERTICAL_SCROLL_BAR_WIDTH_TRIM, |
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8197 height, False); |
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8198 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8199 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8200 /* Move/size the scroll bar window. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8201 if (mask) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8202 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8203 XWindowChanges wc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8204 |
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8205 wc.x = sb_left + VERTICAL_SCROLL_BAR_WIDTH_TRIM; |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8206 wc.y = top; |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8207 wc.width = sb_width - VERTICAL_SCROLL_BAR_WIDTH_TRIM * 2; |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8208 wc.height = height; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8209 XConfigureWindow (FRAME_X_DISPLAY (f), SCROLL_BAR_X_WINDOW (bar), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8210 mask, &wc); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8211 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8212 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8213 #endif /* not USE_TOOLKIT_SCROLL_BARS */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8214 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8215 /* Remember new settings. */ |
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8216 XSETINT (bar->left, sb_left); |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8217 XSETINT (bar->top, top); |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8218 XSETINT (bar->width, sb_width); |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8219 XSETINT (bar->height, height); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8220 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8221 UNBLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8222 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8223 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8224 #if USE_TOOLKIT_SCROLL_BARS |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8225 x_set_toolkit_scroll_bar_thumb (bar, portion, position, whole); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8226 #else /* not USE_TOOLKIT_SCROLL_BARS */ |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8227 /* Set the scroll bar's current state, unless we're currently being |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8228 dragged. */ |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8229 if (NILP (bar->dragging)) |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8230 { |
25541
be975dcf4a0c
(XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents:
25529
diff
changeset
|
8231 int top_range = VERTICAL_SCROLL_BAR_TOP_RANGE (f, height); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8232 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8233 if (whole == 0) |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8234 x_scroll_bar_set_handle (bar, 0, top_range, 0); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8235 else |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8236 { |
3686
910ea1d66bfd
* xterm.c (XTset_vertical_scroll_bar): Use double type for
Jim Blandy <jimb@redhat.com>
parents:
3683
diff
changeset
|
8237 int start = ((double) position * top_range) / whole; |
910ea1d66bfd
* xterm.c (XTset_vertical_scroll_bar): Use double type for
Jim Blandy <jimb@redhat.com>
parents:
3683
diff
changeset
|
8238 int end = ((double) (position + portion) * top_range) / whole; |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8239 x_scroll_bar_set_handle (bar, start, end, 0); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8240 } |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8241 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8242 #endif /* not USE_TOOLKIT_SCROLL_BARS */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8243 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8244 XSETVECTOR (w->vertical_scroll_bar, bar); |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8245 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8246 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8247 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8248 /* The following three hooks are used when we're doing a thorough |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8249 redisplay of the frame. We don't explicitly know which scroll bars |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8250 are going to be deleted, because keeping track of when windows go |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8251 away is a real pain - "Can you say set-window-configuration, boys |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8252 and girls?" Instead, we just assert at the beginning of redisplay |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8253 that *all* scroll bars are to be removed, and then save a scroll bar |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8254 from the fiery pit when we actually redisplay its window. */ |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8255 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8256 /* Arrange for all scroll bars on FRAME to be removed at the next call |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8257 to `*judge_scroll_bars_hook'. A scroll bar may be spared if |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8258 `*redeem_scroll_bar_hook' is applied to its window before the judgment. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8259 |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
8260 static void |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8261 XTcondemn_scroll_bars (frame) |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8262 FRAME_PTR frame; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8263 { |
13205
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
8264 /* Transfer all the scroll bars to FRAME_CONDEMNED_SCROLL_BARS. */ |
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
8265 while (! NILP (FRAME_SCROLL_BARS (frame))) |
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
8266 { |
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
8267 Lisp_Object bar; |
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
8268 bar = FRAME_SCROLL_BARS (frame); |
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
8269 FRAME_SCROLL_BARS (frame) = XSCROLL_BAR (bar)->next; |
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
8270 XSCROLL_BAR (bar)->next = FRAME_CONDEMNED_SCROLL_BARS (frame); |
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
8271 XSCROLL_BAR (bar)->prev = Qnil; |
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
8272 if (! NILP (FRAME_CONDEMNED_SCROLL_BARS (frame))) |
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
8273 XSCROLL_BAR (FRAME_CONDEMNED_SCROLL_BARS (frame))->prev = bar; |
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
8274 FRAME_CONDEMNED_SCROLL_BARS (frame) = bar; |
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
8275 } |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8276 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8277 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8278 /* Un-mark WINDOW's scroll bar for deletion in this judgment cycle. |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8279 Note that WINDOW isn't necessarily condemned at all. */ |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8280 static void |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8281 XTredeem_scroll_bar (window) |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8282 struct window *window; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8283 { |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8284 struct scroll_bar *bar; |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8285 |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8286 /* We can't redeem this window's scroll bar if it doesn't have one. */ |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8287 if (NILP (window->vertical_scroll_bar)) |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8288 abort (); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8289 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8290 bar = XSCROLL_BAR (window->vertical_scroll_bar); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8291 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8292 /* Unlink it from the condemned list. */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8293 { |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8294 FRAME_PTR f = XFRAME (WINDOW_FRAME (window)); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8295 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8296 if (NILP (bar->prev)) |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8297 { |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8298 /* If the prev pointer is nil, it must be the first in one of |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8299 the lists. */ |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8300 if (EQ (FRAME_SCROLL_BARS (f), window->vertical_scroll_bar)) |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8301 /* It's not condemned. Everything's fine. */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8302 return; |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8303 else if (EQ (FRAME_CONDEMNED_SCROLL_BARS (f), |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8304 window->vertical_scroll_bar)) |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8305 FRAME_CONDEMNED_SCROLL_BARS (f) = bar->next; |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8306 else |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8307 /* If its prev pointer is nil, it must be at the front of |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8308 one or the other! */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8309 abort (); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8310 } |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8311 else |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8312 XSCROLL_BAR (bar->prev)->next = bar->next; |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8313 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8314 if (! NILP (bar->next)) |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8315 XSCROLL_BAR (bar->next)->prev = bar->prev; |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8316 |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8317 bar->next = FRAME_SCROLL_BARS (f); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8318 bar->prev = Qnil; |
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
8319 XSETVECTOR (FRAME_SCROLL_BARS (f), bar); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8320 if (! NILP (bar->next)) |
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
8321 XSETVECTOR (XSCROLL_BAR (bar->next)->prev, bar); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8322 } |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8323 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8324 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8325 /* Remove all scroll bars on FRAME that haven't been saved since the |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8326 last call to `*condemn_scroll_bars_hook'. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8327 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8328 static void |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8329 XTjudge_scroll_bars (f) |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8330 FRAME_PTR f; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8331 { |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8332 Lisp_Object bar, next; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8333 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8334 bar = FRAME_CONDEMNED_SCROLL_BARS (f); |
1803
5752a95053f2
* xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents:
1793
diff
changeset
|
8335 |
5752a95053f2
* xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents:
1793
diff
changeset
|
8336 /* Clear out the condemned list now so we won't try to process any |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8337 more events on the hapless scroll bars. */ |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8338 FRAME_CONDEMNED_SCROLL_BARS (f) = Qnil; |
1803
5752a95053f2
* xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents:
1793
diff
changeset
|
8339 |
5752a95053f2
* xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents:
1793
diff
changeset
|
8340 for (; ! NILP (bar); bar = next) |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8341 { |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8342 struct scroll_bar *b = XSCROLL_BAR (bar); |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8343 |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8344 x_scroll_bar_remove (b); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8345 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8346 next = b->next; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8347 b->next = b->prev = Qnil; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8348 } |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8349 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8350 /* Now there should be no references to the condemned scroll bars, |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8351 and they should get garbage-collected. */ |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8352 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8353 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8354 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8355 /* Handle an Expose or GraphicsExpose event on a scroll bar. This |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8356 is a no-op when using toolkit scroll bars. |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8357 |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8358 This may be called from a signal handler, so we have to ignore GC |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8359 mark bits. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8360 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8361 static void |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8362 x_scroll_bar_expose (bar, event) |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8363 struct scroll_bar *bar; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8364 XEvent *event; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8365 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8366 #ifndef USE_TOOLKIT_SCROLL_BARS |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8367 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8368 Window w = SCROLL_BAR_X_WINDOW (bar); |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
8369 FRAME_PTR f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window))); |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
8370 GC gc = f->output_data.x->normal_gc; |
16301
a02555b4b2b9
(x_scroll_bar_create, x_scroll_bar_move):
Richard M. Stallman <rms@gnu.org>
parents:
16251
diff
changeset
|
8371 int width_trim = VERTICAL_SCROLL_BAR_WIDTH_TRIM; |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8372 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8373 BLOCK_INPUT; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8374 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8375 x_scroll_bar_set_handle (bar, XINT (bar->start), XINT (bar->end), 1); |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8376 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8377 /* Draw a one-pixel border just inside the edges of the scroll bar. */ |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
8378 XDrawRectangle (FRAME_X_DISPLAY (f), w, gc, |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8379 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8380 /* x, y, width, height */ |
16251
ec1b1ae37295
Pass frame arg in calls to VERTICAL_SCROLL_BAR_INSIDE_HEIGHT
Richard M. Stallman <rms@gnu.org>
parents:
16220
diff
changeset
|
8381 0, 0, |
16301
a02555b4b2b9
(x_scroll_bar_create, x_scroll_bar_move):
Richard M. Stallman <rms@gnu.org>
parents:
16251
diff
changeset
|
8382 XINT (bar->width) - 1 - width_trim - width_trim, |
16251
ec1b1ae37295
Pass frame arg in calls to VERTICAL_SCROLL_BAR_INSIDE_HEIGHT
Richard M. Stallman <rms@gnu.org>
parents:
16220
diff
changeset
|
8383 XINT (bar->height) - 1); |
ec1b1ae37295
Pass frame arg in calls to VERTICAL_SCROLL_BAR_INSIDE_HEIGHT
Richard M. Stallman <rms@gnu.org>
parents:
16220
diff
changeset
|
8384 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8385 UNBLOCK_INPUT; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8386 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8387 #endif /* not USE_TOOLKIT_SCROLL_BARS */ |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8388 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8389 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8390 /* Handle a mouse click on the scroll bar BAR. If *EMACS_EVENT's kind |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8391 is set to something other than no_event, it is enqueued. |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8392 |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8393 This may be called from a signal handler, so we have to ignore GC |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8394 mark bits. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8395 |
25716
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
8396 #ifndef USE_TOOLKIT_SCROLL_BARS |
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
8397 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8398 static void |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8399 x_scroll_bar_handle_click (bar, event, emacs_event) |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8400 struct scroll_bar *bar; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8401 XEvent *event; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8402 struct input_event *emacs_event; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8403 { |
10287
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
8404 if (! GC_WINDOWP (bar->window)) |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8405 abort (); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8406 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8407 emacs_event->kind = scroll_bar_click; |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
8408 emacs_event->code = event->xbutton.button - Button1; |
10287
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
8409 emacs_event->modifiers |
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
8410 = (x_x_to_emacs_modifiers (FRAME_X_DISPLAY_INFO |
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
8411 (XFRAME (WINDOW_FRAME (XWINDOW (bar->window)))), |
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
8412 event->xbutton.state) |
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
8413 | (event->type == ButtonRelease |
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
8414 ? up_modifier |
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
8415 : down_modifier)); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8416 emacs_event->frame_or_window = bar->window; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8417 emacs_event->timestamp = event->xbutton.time; |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8418 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8419 #if 0 |
16251
ec1b1ae37295
Pass frame arg in calls to VERTICAL_SCROLL_BAR_INSIDE_HEIGHT
Richard M. Stallman <rms@gnu.org>
parents:
16220
diff
changeset
|
8420 FRAME_PTR f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window))); |
10287
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
8421 int internal_height |
16251
ec1b1ae37295
Pass frame arg in calls to VERTICAL_SCROLL_BAR_INSIDE_HEIGHT
Richard M. Stallman <rms@gnu.org>
parents:
16220
diff
changeset
|
8422 = VERTICAL_SCROLL_BAR_INSIDE_HEIGHT (f, XINT (bar->height)); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8423 #endif |
10287
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
8424 int top_range |
16251
ec1b1ae37295
Pass frame arg in calls to VERTICAL_SCROLL_BAR_INSIDE_HEIGHT
Richard M. Stallman <rms@gnu.org>
parents:
16220
diff
changeset
|
8425 = VERTICAL_SCROLL_BAR_TOP_RANGE (f, XINT (bar->height)); |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8426 int y = event->xbutton.y - VERTICAL_SCROLL_BAR_TOP_BORDER; |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8427 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8428 if (y < 0) y = 0; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8429 if (y > top_range) y = top_range; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8430 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8431 if (y < XINT (bar->start)) |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8432 emacs_event->part = scroll_bar_above_handle; |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8433 else if (y < XINT (bar->end) + VERTICAL_SCROLL_BAR_MIN_HANDLE) |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8434 emacs_event->part = scroll_bar_handle; |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8435 else |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8436 emacs_event->part = scroll_bar_below_handle; |
2953
5440f00480e6
* xterm.c (x_scroll_bar_handle_click): Never grab the scroll bar;
Jim Blandy <jimb@redhat.com>
parents:
2923
diff
changeset
|
8437 |
5440f00480e6
* xterm.c (x_scroll_bar_handle_click): Never grab the scroll bar;
Jim Blandy <jimb@redhat.com>
parents:
2923
diff
changeset
|
8438 /* Just because the user has clicked on the handle doesn't mean |
2958
3124e6244d1a
* xterm.c (x_scroll_bar_handle_click): Never grab the scroll bar;
Jim Blandy <jimb@redhat.com>
parents:
2953
diff
changeset
|
8439 they want to drag it. Lisp code needs to be able to decide |
3124e6244d1a
* xterm.c (x_scroll_bar_handle_click): Never grab the scroll bar;
Jim Blandy <jimb@redhat.com>
parents:
2953
diff
changeset
|
8440 whether or not we're dragging. */ |
2953
5440f00480e6
* xterm.c (x_scroll_bar_handle_click): Never grab the scroll bar;
Jim Blandy <jimb@redhat.com>
parents:
2923
diff
changeset
|
8441 #if 0 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8442 /* If the user has just clicked on the handle, record where they're |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8443 holding it. */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8444 if (event->type == ButtonPress |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8445 && emacs_event->part == scroll_bar_handle) |
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
8446 XSETINT (bar->dragging, y - XINT (bar->start)); |
2953
5440f00480e6
* xterm.c (x_scroll_bar_handle_click): Never grab the scroll bar;
Jim Blandy <jimb@redhat.com>
parents:
2923
diff
changeset
|
8447 #endif |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8448 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8449 /* If the user has released the handle, set it to its final position. */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8450 if (event->type == ButtonRelease |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8451 && ! NILP (bar->dragging)) |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8452 { |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8453 int new_start = y - XINT (bar->dragging); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8454 int new_end = new_start + (XINT (bar->end) - XINT (bar->start)); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8455 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8456 x_scroll_bar_set_handle (bar, new_start, new_end, 0); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8457 bar->dragging = Qnil; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8458 } |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8459 |
2958
3124e6244d1a
* xterm.c (x_scroll_bar_handle_click): Never grab the scroll bar;
Jim Blandy <jimb@redhat.com>
parents:
2953
diff
changeset
|
8460 /* Same deal here as the other #if 0. */ |
3124e6244d1a
* xterm.c (x_scroll_bar_handle_click): Never grab the scroll bar;
Jim Blandy <jimb@redhat.com>
parents:
2953
diff
changeset
|
8461 #if 0 |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
8462 /* Clicks on the handle are always reported as occurring at the top of |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8463 the handle. */ |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8464 if (emacs_event->part == scroll_bar_handle) |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8465 emacs_event->x = bar->start; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8466 else |
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
8467 XSETINT (emacs_event->x, y); |
2958
3124e6244d1a
* xterm.c (x_scroll_bar_handle_click): Never grab the scroll bar;
Jim Blandy <jimb@redhat.com>
parents:
2953
diff
changeset
|
8468 #else |
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
8469 XSETINT (emacs_event->x, y); |
2958
3124e6244d1a
* xterm.c (x_scroll_bar_handle_click): Never grab the scroll bar;
Jim Blandy <jimb@redhat.com>
parents:
2953
diff
changeset
|
8470 #endif |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8471 |
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
8472 XSETINT (emacs_event->y, top_range); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8473 } |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8474 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8475 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8476 /* Handle some mouse motion while someone is dragging the scroll bar. |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8477 |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8478 This may be called from a signal handler, so we have to ignore GC |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8479 mark bits. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8480 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8481 static void |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8482 x_scroll_bar_note_movement (bar, event) |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8483 struct scroll_bar *bar; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8484 XEvent *event; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8485 { |
12530
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
8486 FRAME_PTR f = XFRAME (XWINDOW (bar->window)->frame); |
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
8487 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8488 last_mouse_movement_time = event->xmotion.time; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8489 |
12530
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
8490 f->mouse_moved = 1; |
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
8491 XSETVECTOR (last_mouse_scroll_bar, bar); |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8492 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8493 /* If we're dragging the bar, display it. */ |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8494 if (! GC_NILP (bar->dragging)) |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8495 { |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8496 /* Where should the handle be now? */ |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8497 int new_start = event->xmotion.y - XINT (bar->dragging); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8498 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8499 if (new_start != XINT (bar->start)) |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8500 { |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8501 int new_end = new_start + (XINT (bar->end) - XINT (bar->start)); |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
8502 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8503 x_scroll_bar_set_handle (bar, new_start, new_end, 0); |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8504 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8505 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8506 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8507 |
25716
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
8508 #endif /* !USE_TOOLKIT_SCROLL_BARS */ |
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
8509 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8510 /* Return information to the user about the current position of the mouse |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8511 on the scroll bar. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8512 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8513 static void |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
8514 x_scroll_bar_report_motion (fp, bar_window, part, x, y, time) |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
8515 FRAME_PTR *fp; |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8516 Lisp_Object *bar_window; |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8517 enum scroll_bar_part *part; |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8518 Lisp_Object *x, *y; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8519 unsigned long *time; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8520 { |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8521 struct scroll_bar *bar = XSCROLL_BAR (last_mouse_scroll_bar); |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
8522 Window w = SCROLL_BAR_X_WINDOW (bar); |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
8523 FRAME_PTR f = XFRAME (WINDOW_FRAME (XWINDOW (bar->window))); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8524 int win_x, win_y; |
2982
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8525 Window dummy_window; |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8526 int dummy_coord; |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8527 unsigned int dummy_mask; |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8528 |
1803
5752a95053f2
* xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents:
1793
diff
changeset
|
8529 BLOCK_INPUT; |
5752a95053f2
* xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents:
1793
diff
changeset
|
8530 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8531 /* Get the mouse's position relative to the scroll bar window, and |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8532 report that. */ |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
8533 if (! XQueryPointer (FRAME_X_DISPLAY (f), w, |
2982
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8534 |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8535 /* Root, child, root x and root y. */ |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8536 &dummy_window, &dummy_window, |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8537 &dummy_coord, &dummy_coord, |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8538 |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8539 /* Position relative to scroll bar. */ |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8540 &win_x, &win_y, |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8541 |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8542 /* Mouse buttons and modifier keys. */ |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8543 &dummy_mask)) |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8544 ; |
2982
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8545 else |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8546 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8547 #if 0 |
2982
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8548 int inside_height |
16251
ec1b1ae37295
Pass frame arg in calls to VERTICAL_SCROLL_BAR_INSIDE_HEIGHT
Richard M. Stallman <rms@gnu.org>
parents:
16220
diff
changeset
|
8549 = VERTICAL_SCROLL_BAR_INSIDE_HEIGHT (f, XINT (bar->height)); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8550 #endif |
2982
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8551 int top_range |
16251
ec1b1ae37295
Pass frame arg in calls to VERTICAL_SCROLL_BAR_INSIDE_HEIGHT
Richard M. Stallman <rms@gnu.org>
parents:
16220
diff
changeset
|
8552 = VERTICAL_SCROLL_BAR_TOP_RANGE (f, XINT (bar->height)); |
2982
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8553 |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8554 win_y -= VERTICAL_SCROLL_BAR_TOP_BORDER; |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8555 |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8556 if (! NILP (bar->dragging)) |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8557 win_y -= XINT (bar->dragging); |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8558 |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8559 if (win_y < 0) |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8560 win_y = 0; |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8561 if (win_y > top_range) |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8562 win_y = top_range; |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8563 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
8564 *fp = f; |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8565 *bar_window = bar->window; |
2982
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8566 |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8567 if (! NILP (bar->dragging)) |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8568 *part = scroll_bar_handle; |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8569 else if (win_y < XINT (bar->start)) |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8570 *part = scroll_bar_above_handle; |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8571 else if (win_y < XINT (bar->end) + VERTICAL_SCROLL_BAR_MIN_HANDLE) |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8572 *part = scroll_bar_handle; |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8573 else |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8574 *part = scroll_bar_below_handle; |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8575 |
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
8576 XSETINT (*x, win_y); |
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
8577 XSETINT (*y, top_range); |
2982
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8578 |
12530
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
8579 f->mouse_moved = 0; |
2982
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8580 last_mouse_scroll_bar = Qnil; |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8581 } |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8582 |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8583 *time = last_mouse_movement_time; |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8584 |
1803
5752a95053f2
* xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents:
1793
diff
changeset
|
8585 UNBLOCK_INPUT; |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8586 } |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8587 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8588 |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
8589 /* The screen has been cleared so we may have changed foreground or |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8590 background colors, and the scroll bars may need to be redrawn. |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8591 Clear out the scroll bars, and ask for expose events, so we can |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
8592 redraw them. */ |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
8593 |
21514 | 8594 void |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8595 x_scroll_bar_clear (f) |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
8596 FRAME_PTR f; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
8597 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8598 #ifndef USE_TOOLKIT_SCROLL_BARS |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
8599 Lisp_Object bar; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
8600 |
15080
50f527612ef6
(x_scroll_bar_clear): Do nothing if frame now has no scroll bars.
Richard M. Stallman <rms@gnu.org>
parents:
15067
diff
changeset
|
8601 /* We can have scroll bars even if this is 0, |
50f527612ef6
(x_scroll_bar_clear): Do nothing if frame now has no scroll bars.
Richard M. Stallman <rms@gnu.org>
parents:
15067
diff
changeset
|
8602 if we just turned off scroll bar mode. |
50f527612ef6
(x_scroll_bar_clear): Do nothing if frame now has no scroll bars.
Richard M. Stallman <rms@gnu.org>
parents:
15067
diff
changeset
|
8603 But in that case we should not clear them. */ |
50f527612ef6
(x_scroll_bar_clear): Do nothing if frame now has no scroll bars.
Richard M. Stallman <rms@gnu.org>
parents:
15067
diff
changeset
|
8604 if (FRAME_HAS_VERTICAL_SCROLL_BARS (f)) |
50f527612ef6
(x_scroll_bar_clear): Do nothing if frame now has no scroll bars.
Richard M. Stallman <rms@gnu.org>
parents:
15067
diff
changeset
|
8605 for (bar = FRAME_SCROLL_BARS (f); VECTORP (bar); |
50f527612ef6
(x_scroll_bar_clear): Do nothing if frame now has no scroll bars.
Richard M. Stallman <rms@gnu.org>
parents:
15067
diff
changeset
|
8606 bar = XSCROLL_BAR (bar)->next) |
50f527612ef6
(x_scroll_bar_clear): Do nothing if frame now has no scroll bars.
Richard M. Stallman <rms@gnu.org>
parents:
15067
diff
changeset
|
8607 XClearArea (FRAME_X_DISPLAY (f), SCROLL_BAR_X_WINDOW (XSCROLL_BAR (bar)), |
50f527612ef6
(x_scroll_bar_clear): Do nothing if frame now has no scroll bars.
Richard M. Stallman <rms@gnu.org>
parents:
15067
diff
changeset
|
8608 0, 0, 0, 0, True); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8609 #endif /* not USE_TOOLKIT_SCROLL_BARS */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8610 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8611 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8612 /* This processes Expose events from the menu-bar specific X event |
11198
571306c7b038
New arg DPYINFO to all callers of x_window_to_frame, x_any_window_to_frame,
Karl Heuer <kwzh@gnu.org>
parents:
11166
diff
changeset
|
8613 loop in xmenu.c. This allows to redisplay the frame if necessary |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8614 when handling menu-bar or pop-up items. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8615 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8616 int |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8617 process_expose_from_menu (event) |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8618 XEvent event; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8619 { |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8620 FRAME_PTR f; |
11198
571306c7b038
New arg DPYINFO to all callers of x_window_to_frame, x_any_window_to_frame,
Karl Heuer <kwzh@gnu.org>
parents:
11166
diff
changeset
|
8621 struct x_display_info *dpyinfo; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8622 int frame_exposed_p = 0; |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8623 |
5872
6389c826f847
(x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents:
5825
diff
changeset
|
8624 BLOCK_INPUT; |
6389c826f847
(x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents:
5825
diff
changeset
|
8625 |
11198
571306c7b038
New arg DPYINFO to all callers of x_window_to_frame, x_any_window_to_frame,
Karl Heuer <kwzh@gnu.org>
parents:
11166
diff
changeset
|
8626 dpyinfo = x_display_info_for_display (event.xexpose.display); |
571306c7b038
New arg DPYINFO to all callers of x_window_to_frame, x_any_window_to_frame,
Karl Heuer <kwzh@gnu.org>
parents:
11166
diff
changeset
|
8627 f = x_window_to_frame (dpyinfo, event.xexpose.window); |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8628 if (f) |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8629 { |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8630 if (f->async_visible == 0) |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8631 { |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8632 f->async_visible = 1; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8633 f->async_iconified = 0; |
18074
06e42aa4c208
(process_expose_from_menu, XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents:
18057
diff
changeset
|
8634 f->output_data.x->has_been_visible = 1; |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8635 SET_FRAME_GARBAGED (f); |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8636 } |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8637 else |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8638 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8639 expose_frame (x_window_to_frame (dpyinfo, event.xexpose.window), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8640 event.xexpose.x, event.xexpose.y, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8641 event.xexpose.width, event.xexpose.height); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8642 frame_exposed_p = 1; |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8643 } |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8644 } |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8645 else |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8646 { |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8647 struct scroll_bar *bar |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8648 = x_window_to_scroll_bar (event.xexpose.window); |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
8649 |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8650 if (bar) |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8651 x_scroll_bar_expose (bar, &event); |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8652 } |
5872
6389c826f847
(x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents:
5825
diff
changeset
|
8653 |
6389c826f847
(x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents:
5825
diff
changeset
|
8654 UNBLOCK_INPUT; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8655 return frame_exposed_p; |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8656 } |
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8657 |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8658 /* Define a queue to save up SelectionRequest events for later handling. */ |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8659 |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8660 struct selection_event_queue |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8661 { |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8662 XEvent event; |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8663 struct selection_event_queue *next; |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8664 }; |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8665 |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8666 static struct selection_event_queue *queue; |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8667 |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8668 /* Nonzero means queue up certain events--don't process them yet. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8669 |
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8670 static int x_queue_selection_requests; |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8671 |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8672 /* Queue up an X event *EVENT, to be processed later. */ |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8673 |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8674 static void |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
8675 x_queue_event (f, event) |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
8676 FRAME_PTR f; |
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8677 XEvent *event; |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8678 { |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8679 struct selection_event_queue *queue_tmp |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8680 = (struct selection_event_queue *) xmalloc (sizeof (struct selection_event_queue)); |
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8681 |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
8682 if (queue_tmp != NULL) |
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8683 { |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8684 queue_tmp->event = *event; |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8685 queue_tmp->next = queue; |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8686 queue = queue_tmp; |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8687 } |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8688 } |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8689 |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8690 /* Take all the queued events and put them back |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8691 so that they get processed afresh. */ |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8692 |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8693 static void |
10634
de7beeb9f02c
(x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents:
10609
diff
changeset
|
8694 x_unqueue_events (display) |
de7beeb9f02c
(x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents:
10609
diff
changeset
|
8695 Display *display; |
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8696 { |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
8697 while (queue != NULL) |
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8698 { |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8699 struct selection_event_queue *queue_tmp = queue; |
10634
de7beeb9f02c
(x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents:
10609
diff
changeset
|
8700 XPutBackEvent (display, &queue_tmp->event); |
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8701 queue = queue_tmp->next; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8702 xfree ((char *)queue_tmp); |
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8703 } |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8704 } |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8705 |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8706 /* Start queuing SelectionRequest events. */ |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8707 |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8708 void |
10634
de7beeb9f02c
(x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents:
10609
diff
changeset
|
8709 x_start_queuing_selection_requests (display) |
de7beeb9f02c
(x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents:
10609
diff
changeset
|
8710 Display *display; |
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8711 { |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8712 x_queue_selection_requests++; |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8713 } |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8714 |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8715 /* Stop queuing SelectionRequest events. */ |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8716 |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8717 void |
10634
de7beeb9f02c
(x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents:
10609
diff
changeset
|
8718 x_stop_queuing_selection_requests (display) |
de7beeb9f02c
(x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents:
10609
diff
changeset
|
8719 Display *display; |
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8720 { |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8721 x_queue_selection_requests--; |
10634
de7beeb9f02c
(x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents:
10609
diff
changeset
|
8722 x_unqueue_events (display); |
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8723 } |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8724 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8725 /* The main X event-reading loop - XTread_socket. */ |
286 | 8726 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8727 /* Time stamp of enter window event. This is only used by XTread_socket, |
286 | 8728 but we have to put it out here, since static variables within functions |
8729 sometimes don't work. */ | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8730 |
286 | 8731 static Time enter_timestamp; |
8732 | |
1436
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
8733 /* This holds the state XLookupString needs to implement dead keys |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
8734 and other tricks known as "compose processing". _X Window System_ |
1436
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
8735 says that a portable program can't use this, but Stephen Gildea assures |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
8736 me that letting the compiler initialize it to zeros will work okay. |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
8737 |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
8738 This must be defined outside of XTread_socket, for the same reasons |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8739 given for enter_time stamp, above. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8740 |
1436
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
8741 static XComposeStatus compose_status; |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
8742 |
2064 | 8743 /* Record the last 100 characters stored |
8744 to help debug the loss-of-chars-during-GC problem. */ | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8745 |
12657
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
8746 static int temp_index; |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
8747 static short temp_buffer[100]; |
2064 | 8748 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8749 /* Set this to nonzero to fake an "X I/O error" |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8750 on a particular display. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8751 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8752 struct x_display_info *XTread_socket_fake_io_error; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8753 |
12657
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
8754 /* When we find no input here, we occasionally do a no-op command |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
8755 to verify that the X server is still running and we can still talk with it. |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
8756 We try all the open displays, one by one. |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
8757 This variable is used for cycling thru the displays. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8758 |
12657
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
8759 static struct x_display_info *next_noop_dpyinfo; |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
8760 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8761 #define SET_SAVED_MENU_EVENT(size) \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8762 do \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8763 { \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8764 if (f->output_data.x->saved_menu_event == 0) \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8765 f->output_data.x->saved_menu_event \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8766 = (XEvent *) xmalloc (sizeof (XEvent)); \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8767 bcopy (&event, f->output_data.x->saved_menu_event, size); \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8768 if (numchars >= 1) \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8769 { \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8770 bufp->kind = menu_bar_activate_event; \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8771 XSETFRAME (bufp->frame_or_window, f); \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8772 bufp++; \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8773 count++; \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8774 numchars--; \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8775 } \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8776 } \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8777 while (0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8778 |
15711
099dc465c948
(SET_SAVED_MENU_EVENT): New macro.
Karl Heuer <kwzh@gnu.org>
parents:
15639
diff
changeset
|
8779 #define SET_SAVED_BUTTON_EVENT SET_SAVED_MENU_EVENT (sizeof (XButtonEvent)) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8780 #define SET_SAVED_KEY_EVENT SET_SAVED_MENU_EVENT (sizeof (XKeyEvent)) |
15711
099dc465c948
(SET_SAVED_MENU_EVENT): New macro.
Karl Heuer <kwzh@gnu.org>
parents:
15639
diff
changeset
|
8781 |
286 | 8782 /* Read events coming from the X server. |
8783 This routine is called by the SIGIO handler. | |
8784 We return as soon as there are no more events to be read. | |
8785 | |
8786 Events representing keys are stored in buffer BUFP, | |
8787 which can hold up to NUMCHARS characters. | |
8788 We return the number of characters stored into the buffer, | |
8789 thus pretending to be `read'. | |
8790 | |
8791 EXPECTED is nonzero if the caller knows input is available. */ | |
8792 | |
1530
a7f8a1fe258e
* xterm.c (x_convert_modifiers): Declare this to return an
Jim Blandy <jimb@redhat.com>
parents:
1436
diff
changeset
|
8793 int |
16330
e4d9d77012bc
(XTread_socket): Delete WAITP arg.
Richard M. Stallman <rms@gnu.org>
parents:
16301
diff
changeset
|
8794 XTread_socket (sd, bufp, numchars, expected) |
286 | 8795 register int sd; |
15711
099dc465c948
(SET_SAVED_MENU_EVENT): New macro.
Karl Heuer <kwzh@gnu.org>
parents:
15639
diff
changeset
|
8796 /* register */ struct input_event *bufp; |
099dc465c948
(SET_SAVED_MENU_EVENT): New macro.
Karl Heuer <kwzh@gnu.org>
parents:
15639
diff
changeset
|
8797 /* register */ int numchars; |
286 | 8798 int expected; |
8799 { | |
8800 int count = 0; | |
8801 int nbytes = 0; | |
8802 XEvent event; | |
771 | 8803 struct frame *f; |
3938
83d870a52936
* xterm.c (XTread_socket): Initialize event_found to zero, and
Jim Blandy <jimb@redhat.com>
parents:
3924
diff
changeset
|
8804 int event_found = 0; |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
8805 struct x_display_info *dpyinfo; |
13232
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
8806 #ifdef HAVE_X_I18N |
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
8807 Status status_return; |
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
8808 #endif |
286 | 8809 |
2439
b6c62e4abf59
Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents:
2353
diff
changeset
|
8810 if (interrupt_input_blocked) |
286 | 8811 { |
2439
b6c62e4abf59
Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents:
2353
diff
changeset
|
8812 interrupt_input_pending = 1; |
286 | 8813 return -1; |
8814 } | |
8815 | |
2439
b6c62e4abf59
Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents:
2353
diff
changeset
|
8816 interrupt_input_pending = 0; |
286 | 8817 BLOCK_INPUT; |
9337
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
8818 |
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
8819 /* So people can tell when we have read the available input. */ |
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
8820 input_signal_count++; |
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
8821 |
286 | 8822 if (numchars <= 0) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8823 abort (); /* Don't think this happens. */ |
286 | 8824 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8825 /* Find the display we are supposed to read input for. |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8826 It's the one communicating on descriptor SD. */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8827 for (dpyinfo = x_display_list; dpyinfo; dpyinfo = dpyinfo->next) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8828 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8829 #if 0 /* This ought to be unnecessary; let's verify it. */ |
286 | 8830 #ifdef FIOSNBIO |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8831 /* If available, Xlib uses FIOSNBIO to make the socket |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8832 non-blocking, and then looks for EWOULDBLOCK. If O_NDELAY is set, |
14165
65e51231924e
(XTread_socket): For selection_clear_event and
Richard M. Stallman <rms@gnu.org>
parents:
13898
diff
changeset
|
8833 FIOSNBIO is ignored, and instead of signaling EWOULDBLOCK, |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8834 a read returns 0, which Xlib interprets as equivalent to EPIPE. */ |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8835 fcntl (dpyinfo->connection, F_SETFL, 0); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
8836 #endif /* ! defined (FIOSNBIO) */ |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8837 #endif |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8838 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8839 #if 0 /* This code can't be made to work, with multiple displays, |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8840 and appears not to be used on any system any more. |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8841 Also keyboard.c doesn't turn O_NDELAY on and off |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8842 for X connections. */ |
286 | 8843 #ifndef SIGIO |
8844 #ifndef HAVE_SELECT | |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8845 if (! (fcntl (dpyinfo->connection, F_GETFL, 0) & O_NDELAY)) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8846 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8847 extern int read_alarm_should_throw; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8848 read_alarm_should_throw = 1; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8849 XPeekEvent (dpyinfo->display, &event); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8850 read_alarm_should_throw = 0; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8851 } |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
8852 #endif /* HAVE_SELECT */ |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
8853 #endif /* SIGIO */ |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8854 #endif |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8855 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8856 /* For debugging, this gives a way to fake an I/O error. */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8857 if (dpyinfo == XTread_socket_fake_io_error) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8858 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8859 XTread_socket_fake_io_error = 0; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8860 x_io_error_quitter (dpyinfo->display); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8861 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8862 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8863 while (XPending (dpyinfo->display)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8864 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8865 XNextEvent (dpyinfo->display, &event); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8866 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8867 if (display_busy_cursor_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8868 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8869 /* Setting inhibit_busy_cursor to 2 inhibits busy-cursor |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8870 display until the next X event is read and we come |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8871 here again. Setting it to 1 inhibits busy-cursor |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8872 display for direct commands. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8873 if (event.type == MotionNotify |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8874 || event.type == EnterNotify |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8875 || (dpyinfo->grabbed |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8876 && event.type != ButtonRelease)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8877 inhibit_busy_cursor = 2; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8878 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8879 inhibit_busy_cursor = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8880 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8881 |
15973
6ad9e8fee494
(XTread_socket): Call XFilterEvent on all events,
Richard M. Stallman <rms@gnu.org>
parents:
15928
diff
changeset
|
8882 #ifdef HAVE_X_I18N |
15990
1185f8fc0bfb
(do_line_dance, dumprectangle): Use x_update_cursor.
Richard M. Stallman <rms@gnu.org>
parents:
15973
diff
changeset
|
8883 { |
26968
3039d2412c9e
(XTread_socket): At the beginning of the loop, pass the
Gerd Moellmann <gerd@gnu.org>
parents:
26912
diff
changeset
|
8884 /* Filter events for the current X input method. |
3039d2412c9e
(XTread_socket): At the beginning of the loop, pass the
Gerd Moellmann <gerd@gnu.org>
parents:
26912
diff
changeset
|
8885 XFilterEvent returns non-zero if the input method has |
3039d2412c9e
(XTread_socket): At the beginning of the loop, pass the
Gerd Moellmann <gerd@gnu.org>
parents:
26912
diff
changeset
|
8886 consumed the event. We pass the frame's X window to |
3039d2412c9e
(XTread_socket): At the beginning of the loop, pass the
Gerd Moellmann <gerd@gnu.org>
parents:
26912
diff
changeset
|
8887 XFilterEvent because that's the one for which the IC |
3039d2412c9e
(XTread_socket): At the beginning of the loop, pass the
Gerd Moellmann <gerd@gnu.org>
parents:
26912
diff
changeset
|
8888 was created. */ |
3039d2412c9e
(XTread_socket): At the beginning of the loop, pass the
Gerd Moellmann <gerd@gnu.org>
parents:
26912
diff
changeset
|
8889 struct frame *f1 |
3039d2412c9e
(XTread_socket): At the beginning of the loop, pass the
Gerd Moellmann <gerd@gnu.org>
parents:
26912
diff
changeset
|
8890 = x_any_window_to_frame (dpyinfo, event.xclient.window); |
3039d2412c9e
(XTread_socket): At the beginning of the loop, pass the
Gerd Moellmann <gerd@gnu.org>
parents:
26912
diff
changeset
|
8891 if (f1 |
3039d2412c9e
(XTread_socket): At the beginning of the loop, pass the
Gerd Moellmann <gerd@gnu.org>
parents:
26912
diff
changeset
|
8892 && FRAME_XIC (f1) |
3039d2412c9e
(XTread_socket): At the beginning of the loop, pass the
Gerd Moellmann <gerd@gnu.org>
parents:
26912
diff
changeset
|
8893 && XFilterEvent (&event, FRAME_X_WINDOW (f1))) |
15990
1185f8fc0bfb
(do_line_dance, dumprectangle): Use x_update_cursor.
Richard M. Stallman <rms@gnu.org>
parents:
15973
diff
changeset
|
8894 break; |
1185f8fc0bfb
(do_line_dance, dumprectangle): Use x_update_cursor.
Richard M. Stallman <rms@gnu.org>
parents:
15973
diff
changeset
|
8895 } |
15973
6ad9e8fee494
(XTread_socket): Call XFilterEvent on all events,
Richard M. Stallman <rms@gnu.org>
parents:
15928
diff
changeset
|
8896 #endif |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8897 event_found = 1; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8898 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8899 switch (event.type) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8900 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8901 case ClientMessage: |
642 | 8902 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8903 if (event.xclient.message_type |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8904 == dpyinfo->Xatom_wm_protocols |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8905 && event.xclient.format == 32) |
642 | 8906 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8907 if (event.xclient.data.l[0] |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8908 == dpyinfo->Xatom_wm_take_focus) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8909 { |
18885
f7b6579204b8
(XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents:
18775
diff
changeset
|
8910 /* Use x_any_window_to_frame because this |
f7b6579204b8
(XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents:
18775
diff
changeset
|
8911 could be the shell widget window |
f7b6579204b8
(XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents:
18775
diff
changeset
|
8912 if the frame has no title bar. */ |
f7b6579204b8
(XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents:
18775
diff
changeset
|
8913 f = x_any_window_to_frame (dpyinfo, event.xclient.window); |
13232
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
8914 #ifdef HAVE_X_I18N |
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
8915 /* Not quite sure this is needed -pd */ |
18885
f7b6579204b8
(XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents:
18775
diff
changeset
|
8916 if (f && FRAME_XIC (f)) |
13232
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
8917 XSetICFocus (FRAME_XIC (f)); |
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
8918 #endif |
25921
eb5839cbfb16
(XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents:
25795
diff
changeset
|
8919 #if 0 /* Emacs sets WM hints whose `input' field is `true'. This |
eb5839cbfb16
(XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents:
25795
diff
changeset
|
8920 instructs the WM to set the input focus automatically for |
eb5839cbfb16
(XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents:
25795
diff
changeset
|
8921 Emacs with a call to XSetInputFocus. Setting WM_TAKE_FOCUS |
eb5839cbfb16
(XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents:
25795
diff
changeset
|
8922 tells the WM to send us a ClientMessage WM_TAKE_FOCUS after |
eb5839cbfb16
(XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents:
25795
diff
changeset
|
8923 it has set the focus. So, XSetInputFocus below is not |
eb5839cbfb16
(XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents:
25795
diff
changeset
|
8924 needed. |
eb5839cbfb16
(XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents:
25795
diff
changeset
|
8925 |
eb5839cbfb16
(XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents:
25795
diff
changeset
|
8926 The call to XSetInputFocus below has also caused trouble. In |
eb5839cbfb16
(XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents:
25795
diff
changeset
|
8927 cases where the XSetInputFocus done by the WM and the one |
eb5839cbfb16
(XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents:
25795
diff
changeset
|
8928 below are temporally close (on a fast machine), the call |
eb5839cbfb16
(XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents:
25795
diff
changeset
|
8929 below can generate additional FocusIn events which confuse |
eb5839cbfb16
(XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents:
25795
diff
changeset
|
8930 Emacs. */ |
eb5839cbfb16
(XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents:
25795
diff
changeset
|
8931 |
18996
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
8932 /* Since we set WM_TAKE_FOCUS, we must call |
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
8933 XSetInputFocus explicitly. But not if f is null, |
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
8934 since that might be an event for a deleted frame. */ |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8935 if (f) |
18996
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
8936 { |
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
8937 Display *d = event.xclient.display; |
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
8938 /* Catch and ignore errors, in case window has been |
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
8939 iconified by a window manager such as GWM. */ |
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
8940 int count = x_catch_errors (d); |
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
8941 XSetInputFocus (d, event.xclient.window, |
25633
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8942 /* The ICCCM says this is |
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8943 the only valid choice. */ |
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8944 RevertToParent, |
18996
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
8945 event.xclient.data.l[1]); |
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
8946 /* This is needed to detect the error |
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
8947 if there is an error. */ |
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
8948 XSync (d, False); |
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
8949 x_uncatch_errors (d, count); |
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
8950 } |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8951 /* Not certain about handling scroll bars here */ |
25921
eb5839cbfb16
(XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents:
25795
diff
changeset
|
8952 #endif /* 0 */ |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8953 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8954 else if (event.xclient.data.l[0] |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8955 == dpyinfo->Xatom_wm_save_yourself) |
642 | 8956 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8957 /* Save state modify the WM_COMMAND property to |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8958 something which can reinstate us. This notifies |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8959 the session manager, who's looking for such a |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8960 PropertyNotify. Can restart processing when |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8961 a keyboard or mouse event arrives. */ |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8962 if (numchars > 0) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8963 { |
11198
571306c7b038
New arg DPYINFO to all callers of x_window_to_frame, x_any_window_to_frame,
Karl Heuer <kwzh@gnu.org>
parents:
11166
diff
changeset
|
8964 f = x_top_window_to_frame (dpyinfo, |
571306c7b038
New arg DPYINFO to all callers of x_window_to_frame, x_any_window_to_frame,
Karl Heuer <kwzh@gnu.org>
parents:
11166
diff
changeset
|
8965 event.xclient.window); |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8966 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8967 /* This is just so we only give real data once |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8968 for a single Emacs process. */ |
25682
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
8969 if (f == SELECTED_FRAME ()) |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8970 XSetCommand (FRAME_X_DISPLAY (f), |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8971 event.xclient.window, |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8972 initial_argv, initial_argc); |
15519
045a36502ad4
(XTread_socket, Xatom_wm_save_yourself clause):
Richard M. Stallman <rms@gnu.org>
parents:
15515
diff
changeset
|
8973 else if (f) |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8974 XSetCommand (FRAME_X_DISPLAY (f), |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8975 event.xclient.window, |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8976 0, 0); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8977 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8978 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8979 else if (event.xclient.data.l[0] |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8980 == dpyinfo->Xatom_wm_delete_window) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8981 { |
11198
571306c7b038
New arg DPYINFO to all callers of x_window_to_frame, x_any_window_to_frame,
Karl Heuer <kwzh@gnu.org>
parents:
11166
diff
changeset
|
8982 struct frame *f |
571306c7b038
New arg DPYINFO to all callers of x_window_to_frame, x_any_window_to_frame,
Karl Heuer <kwzh@gnu.org>
parents:
11166
diff
changeset
|
8983 = x_any_window_to_frame (dpyinfo, |
571306c7b038
New arg DPYINFO to all callers of x_window_to_frame, x_any_window_to_frame,
Karl Heuer <kwzh@gnu.org>
parents:
11166
diff
changeset
|
8984 event.xclient.window); |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8985 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8986 if (f) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8987 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8988 if (numchars == 0) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8989 abort (); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8990 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8991 bufp->kind = delete_window_event; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8992 XSETFRAME (bufp->frame_or_window, f); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8993 bufp++; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8994 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8995 count += 1; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8996 numchars -= 1; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8997 } |
642 | 8998 } |
8999 } | |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9000 else if (event.xclient.message_type |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9001 == dpyinfo->Xatom_wm_configure_denied) |
642 | 9002 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9003 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9004 else if (event.xclient.message_type |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9005 == dpyinfo->Xatom_wm_window_moved) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9006 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9007 int new_x, new_y; |
11198
571306c7b038
New arg DPYINFO to all callers of x_window_to_frame, x_any_window_to_frame,
Karl Heuer <kwzh@gnu.org>
parents:
11166
diff
changeset
|
9008 struct frame *f |
571306c7b038
New arg DPYINFO to all callers of x_window_to_frame, x_any_window_to_frame,
Karl Heuer <kwzh@gnu.org>
parents:
11166
diff
changeset
|
9009 = x_window_to_frame (dpyinfo, event.xclient.window); |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9010 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9011 new_x = event.xclient.data.s[0]; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9012 new_y = event.xclient.data.s[1]; |
771 | 9013 |
9014 if (f) | |
5156
fd78458b8c43
(XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents:
5018
diff
changeset
|
9015 { |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
9016 f->output_data.x->left_pos = new_x; |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
9017 f->output_data.x->top_pos = new_y; |
5156
fd78458b8c43
(XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents:
5018
diff
changeset
|
9018 } |
642 | 9019 } |
13507
9a9f459075af
(HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents:
13363
diff
changeset
|
9020 #ifdef HACK_EDITRES |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9021 else if (event.xclient.message_type |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9022 == dpyinfo->Xatom_editres) |
5156
fd78458b8c43
(XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents:
5018
diff
changeset
|
9023 { |
11198
571306c7b038
New arg DPYINFO to all callers of x_window_to_frame, x_any_window_to_frame,
Karl Heuer <kwzh@gnu.org>
parents:
11166
diff
changeset
|
9024 struct frame *f |
571306c7b038
New arg DPYINFO to all callers of x_window_to_frame, x_any_window_to_frame,
Karl Heuer <kwzh@gnu.org>
parents:
11166
diff
changeset
|
9025 = x_any_window_to_frame (dpyinfo, event.xclient.window); |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
9026 _XEditResCheckMessages (f->output_data.x->widget, NULL, |
11198
571306c7b038
New arg DPYINFO to all callers of x_window_to_frame, x_any_window_to_frame,
Karl Heuer <kwzh@gnu.org>
parents:
11166
diff
changeset
|
9027 &event, NULL); |
5156
fd78458b8c43
(XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents:
5018
diff
changeset
|
9028 } |
13507
9a9f459075af
(HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents:
13363
diff
changeset
|
9029 #endif /* HACK_EDITRES */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9030 else if ((event.xclient.message_type |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9031 == dpyinfo->Xatom_DONE) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9032 || (event.xclient.message_type |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9033 == dpyinfo->Xatom_PAGE)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9034 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9035 /* Ghostview job completed. Kill it. We could |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9036 reply with "Next" if we received "Page", but we |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9037 currently never do because we are interested in |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9038 images, only, which should have 1 page. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9039 Pixmap pixmap = (Pixmap) event.xclient.data.l[1]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9040 struct frame *f |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9041 = x_window_to_frame (dpyinfo, event.xclient.window); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9042 x_kill_gs_process (pixmap, f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9043 expose_frame (f, 0, 0, 0, 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9044 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9045 #ifdef USE_TOOLKIT_SCROLL_BARS |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9046 /* Scroll bar callbacks send a ClientMessage from which |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9047 we construct an input_event. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9048 else if (event.xclient.message_type |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9049 == dpyinfo->Xatom_Scrollbar) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9050 { |
26633
346fcfbf7123
(XTread_socket) <ClientMessage, Xatom_Scrollbar>:
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
9051 if (display_busy_cursor_p) |
346fcfbf7123
(XTread_socket) <ClientMessage, Xatom_Scrollbar>:
Gerd Moellmann <gerd@gnu.org>
parents:
26088
diff
changeset
|
9052 inhibit_busy_cursor = 2; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9053 x_scroll_bar_to_input_event (&event, bufp); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9054 ++bufp, ++count, --numchars; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9055 goto out; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9056 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9057 #endif /* USE_TOOLKIT_SCROLL_BARS */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9058 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9059 goto OTHER; |
642 | 9060 } |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9061 break; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9062 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9063 case SelectionNotify: |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9064 #ifdef USE_X_TOOLKIT |
11198
571306c7b038
New arg DPYINFO to all callers of x_window_to_frame, x_any_window_to_frame,
Karl Heuer <kwzh@gnu.org>
parents:
11166
diff
changeset
|
9065 if (! x_window_to_frame (dpyinfo, event.xselection.requestor)) |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9066 goto OTHER; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9067 #endif /* not USE_X_TOOLKIT */ |
21514 | 9068 x_handle_selection_notify (&event.xselection); |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9069 break; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9070 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9071 case SelectionClear: /* Someone has grabbed ownership. */ |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9072 #ifdef USE_X_TOOLKIT |
11198
571306c7b038
New arg DPYINFO to all callers of x_window_to_frame, x_any_window_to_frame,
Karl Heuer <kwzh@gnu.org>
parents:
11166
diff
changeset
|
9073 if (! x_window_to_frame (dpyinfo, event.xselectionclear.window)) |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9074 goto OTHER; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9075 #endif /* USE_X_TOOLKIT */ |
6941
a914781ef58a
(Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents:
6934
diff
changeset
|
9076 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9077 XSelectionClearEvent *eventp = (XSelectionClearEvent *) &event; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9078 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9079 if (numchars == 0) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9080 abort (); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9081 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9082 bufp->kind = selection_clear_event; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9083 SELECTION_EVENT_DISPLAY (bufp) = eventp->display; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9084 SELECTION_EVENT_SELECTION (bufp) = eventp->selection; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9085 SELECTION_EVENT_TIME (bufp) = eventp->time; |
14165
65e51231924e
(XTread_socket): For selection_clear_event and
Richard M. Stallman <rms@gnu.org>
parents:
13898
diff
changeset
|
9086 bufp->frame_or_window = Qnil; |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9087 bufp++; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9088 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9089 count += 1; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9090 numchars -= 1; |
6941
a914781ef58a
(Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents:
6934
diff
changeset
|
9091 } |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9092 break; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9093 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9094 case SelectionRequest: /* Someone wants our selection. */ |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
9095 #ifdef USE_X_TOOLKIT |
11198
571306c7b038
New arg DPYINFO to all callers of x_window_to_frame, x_any_window_to_frame,
Karl Heuer <kwzh@gnu.org>
parents:
11166
diff
changeset
|
9096 if (!x_window_to_frame (dpyinfo, event.xselectionrequest.owner)) |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9097 goto OTHER; |
6984
8e9465c13702
(XTread_socket): Delete the non-NEW_SELECTIONS code
Richard M. Stallman <rms@gnu.org>
parents:
6983
diff
changeset
|
9098 #endif /* USE_X_TOOLKIT */ |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9099 if (x_queue_selection_requests) |
11198
571306c7b038
New arg DPYINFO to all callers of x_window_to_frame, x_any_window_to_frame,
Karl Heuer <kwzh@gnu.org>
parents:
11166
diff
changeset
|
9100 x_queue_event (x_window_to_frame (dpyinfo, event.xselectionrequest.owner), |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9101 &event); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9102 else |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9103 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9104 XSelectionRequestEvent *eventp = (XSelectionRequestEvent *) &event; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9105 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9106 if (numchars == 0) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9107 abort (); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9108 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9109 bufp->kind = selection_request_event; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9110 SELECTION_EVENT_DISPLAY (bufp) = eventp->display; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9111 SELECTION_EVENT_REQUESTOR (bufp) = eventp->requestor; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9112 SELECTION_EVENT_SELECTION (bufp) = eventp->selection; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9113 SELECTION_EVENT_TARGET (bufp) = eventp->target; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9114 SELECTION_EVENT_PROPERTY (bufp) = eventp->property; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9115 SELECTION_EVENT_TIME (bufp) = eventp->time; |
14165
65e51231924e
(XTread_socket): For selection_clear_event and
Richard M. Stallman <rms@gnu.org>
parents:
13898
diff
changeset
|
9116 bufp->frame_or_window = Qnil; |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9117 bufp++; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9118 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9119 count += 1; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9120 numchars -= 1; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9121 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9122 break; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9123 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9124 case PropertyNotify: |
6984
8e9465c13702
(XTread_socket): Delete the non-NEW_SELECTIONS code
Richard M. Stallman <rms@gnu.org>
parents:
6983
diff
changeset
|
9125 #ifdef USE_X_TOOLKIT |
11198
571306c7b038
New arg DPYINFO to all callers of x_window_to_frame, x_any_window_to_frame,
Karl Heuer <kwzh@gnu.org>
parents:
11166
diff
changeset
|
9126 if (!x_any_window_to_frame (dpyinfo, event.xproperty.window)) |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9127 goto OTHER; |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
9128 #endif /* not USE_X_TOOLKIT */ |
21514 | 9129 x_handle_property_notify (&event.xproperty); |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9130 break; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9131 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9132 case ReparentNotify: |
11198
571306c7b038
New arg DPYINFO to all callers of x_window_to_frame, x_any_window_to_frame,
Karl Heuer <kwzh@gnu.org>
parents:
11166
diff
changeset
|
9133 f = x_top_window_to_frame (dpyinfo, event.xreparent.window); |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9134 if (f) |
286 | 9135 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9136 int x, y; |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
9137 f->output_data.x->parent_desc = event.xreparent.parent; |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9138 x_real_positions (f, &x, &y); |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
9139 f->output_data.x->left_pos = x; |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
9140 f->output_data.x->top_pos = y; |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9141 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9142 break; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9143 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9144 case Expose: |
11198
571306c7b038
New arg DPYINFO to all callers of x_window_to_frame, x_any_window_to_frame,
Karl Heuer <kwzh@gnu.org>
parents:
11166
diff
changeset
|
9145 f = x_window_to_frame (dpyinfo, event.xexpose.window); |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9146 if (f) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9147 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9148 if (f->async_visible == 0) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9149 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9150 f->async_visible = 1; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9151 f->async_iconified = 0; |
18074
06e42aa4c208
(process_expose_from_menu, XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents:
18057
diff
changeset
|
9152 f->output_data.x->has_been_visible = 1; |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9153 SET_FRAME_GARBAGED (f); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9154 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9155 else |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9156 expose_frame (x_window_to_frame (dpyinfo, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9157 event.xexpose.window), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9158 event.xexpose.x, event.xexpose.y, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9159 event.xexpose.width, event.xexpose.height); |
286 | 9160 } |
9161 else | |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9162 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9163 #ifdef USE_TOOLKIT_SCROLL_BARS |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9164 /* Dispatch event to the widget. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9165 goto OTHER; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9166 #else /* not USE_TOOLKIT_SCROLL_BARS */ |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9167 struct scroll_bar *bar |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9168 = x_window_to_scroll_bar (event.xexpose.window); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9169 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9170 if (bar) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9171 x_scroll_bar_expose (bar, &event); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9172 #ifdef USE_X_TOOLKIT |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9173 else |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9174 goto OTHER; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9175 #endif /* USE_X_TOOLKIT */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9176 #endif /* not USE_TOOLKIT_SCROLL_BARS */ |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9177 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9178 break; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9179 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9180 case GraphicsExpose: /* This occurs when an XCopyArea's |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9181 source area was obscured or not |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9182 available.*/ |
11198
571306c7b038
New arg DPYINFO to all callers of x_window_to_frame, x_any_window_to_frame,
Karl Heuer <kwzh@gnu.org>
parents:
11166
diff
changeset
|
9183 f = x_window_to_frame (dpyinfo, event.xgraphicsexpose.drawable); |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9184 if (f) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9185 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9186 expose_frame (f, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9187 event.xgraphicsexpose.x, event.xgraphicsexpose.y, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9188 event.xgraphicsexpose.width, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9189 event.xgraphicsexpose.height); |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9190 } |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
9191 #ifdef USE_X_TOOLKIT |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
9192 else |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
9193 goto OTHER; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
9194 #endif /* USE_X_TOOLKIT */ |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9195 break; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9196 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9197 case NoExpose: /* This occurs when an XCopyArea's |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9198 source area was completely |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9199 available */ |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9200 break; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9201 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9202 case UnmapNotify: |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9203 /* Redo the mouse-highlight after the tooltip has gone. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9204 if (event.xmap.window == tip_window) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9205 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9206 tip_window = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9207 redo_mouse_highlight (); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9208 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9209 |
12750
7e5276da6270
(XTread_socket): For UnmapNotify, use x_top_window_to_frame.
Richard M. Stallman <rms@gnu.org>
parents:
12667
diff
changeset
|
9210 f = x_top_window_to_frame (dpyinfo, event.xunmap.window); |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9211 if (f) /* F may no longer exist if |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9212 the frame was deleted. */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9213 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9214 /* While a frame is unmapped, display generation is |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9215 disabled; you don't want to spend time updating a |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9216 display that won't ever be seen. */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9217 f->async_visible = 0; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9218 /* We can't distinguish, from the event, whether the window |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9219 has become iconified or invisible. So assume, if it |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9220 was previously visible, than now it is iconified. |
17963
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
9221 But x_make_frame_invisible clears both |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
9222 the visible flag and the iconified flag; |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
9223 and that way, we know the window is not iconified now. */ |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9224 if (FRAME_VISIBLE_P (f) || FRAME_ICONIFIED_P (f)) |
17963
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
9225 { |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
9226 f->async_iconified = 1; |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
9227 |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
9228 bufp->kind = iconify_event; |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
9229 XSETFRAME (bufp->frame_or_window, f); |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
9230 bufp++; |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
9231 count++; |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
9232 numchars--; |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
9233 } |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9234 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9235 goto OTHER; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9236 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9237 case MapNotify: |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9238 if (event.xmap.window == tip_window) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9239 /* The tooltip has been drawn already. Avoid |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9240 the SET_FRAME_GARBAGED below. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9241 goto OTHER; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9242 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9243 /* We use x_top_window_to_frame because map events can |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9244 come for sub-windows and they don't mean that the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9245 frame is visible. */ |
11198
571306c7b038
New arg DPYINFO to all callers of x_window_to_frame, x_any_window_to_frame,
Karl Heuer <kwzh@gnu.org>
parents:
11166
diff
changeset
|
9246 f = x_top_window_to_frame (dpyinfo, event.xmap.window); |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9247 if (f) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9248 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9249 f->async_visible = 1; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9250 f->async_iconified = 0; |
18074
06e42aa4c208
(process_expose_from_menu, XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents:
18057
diff
changeset
|
9251 f->output_data.x->has_been_visible = 1; |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9252 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9253 /* wait_reading_process_input will notice this and update |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9254 the frame's display structures. */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9255 SET_FRAME_GARBAGED (f); |
9823
e6dbda62fd61
(XTread_socket): Generate iconify and deiconify events.
Karl Heuer <kwzh@gnu.org>
parents:
9763
diff
changeset
|
9256 |
11348
e366abc2c753
(XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents:
11259
diff
changeset
|
9257 if (f->iconified) |
e366abc2c753
(XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents:
11259
diff
changeset
|
9258 { |
e366abc2c753
(XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents:
11259
diff
changeset
|
9259 bufp->kind = deiconify_event; |
e366abc2c753
(XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents:
11259
diff
changeset
|
9260 XSETFRAME (bufp->frame_or_window, f); |
e366abc2c753
(XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents:
11259
diff
changeset
|
9261 bufp++; |
e366abc2c753
(XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents:
11259
diff
changeset
|
9262 count++; |
e366abc2c753
(XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents:
11259
diff
changeset
|
9263 numchars--; |
e366abc2c753
(XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents:
11259
diff
changeset
|
9264 } |
17519
5aa7011aa3d5
(x_set_offset): Turn off the code that added the border_width
Richard M. Stallman <rms@gnu.org>
parents:
17371
diff
changeset
|
9265 else if (! NILP (Vframe_list) |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
9266 && ! NILP (XCDR (Vframe_list))) |
11921
6ecaa3fac4e4
(XTread_socket): For MapNotify, call record_asynch_buffer_change.
Karl Heuer <kwzh@gnu.org>
parents:
11915
diff
changeset
|
9267 /* Force a redisplay sooner or later |
6ecaa3fac4e4
(XTread_socket): For MapNotify, call record_asynch_buffer_change.
Karl Heuer <kwzh@gnu.org>
parents:
11915
diff
changeset
|
9268 to update the frame titles |
6ecaa3fac4e4
(XTread_socket): For MapNotify, call record_asynch_buffer_change.
Karl Heuer <kwzh@gnu.org>
parents:
11915
diff
changeset
|
9269 in case this is the second frame. */ |
6ecaa3fac4e4
(XTread_socket): For MapNotify, call record_asynch_buffer_change.
Karl Heuer <kwzh@gnu.org>
parents:
11915
diff
changeset
|
9270 record_asynch_buffer_change (); |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9271 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9272 goto OTHER; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9273 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9274 case KeyPress: |
11198
571306c7b038
New arg DPYINFO to all callers of x_window_to_frame, x_any_window_to_frame,
Karl Heuer <kwzh@gnu.org>
parents:
11166
diff
changeset
|
9275 f = x_any_window_to_frame (dpyinfo, event.xkey.window); |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9276 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9277 #ifdef USE_MOTIF |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9278 /* I couldn't find a way to prevent LessTif scroll bars |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9279 from consuming key events. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9280 if (f == 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9281 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9282 Widget widget = XtWindowToWidget (dpyinfo->display, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9283 event.xkey.window); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9284 if (widget && XmIsScrollBar (widget)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9285 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9286 widget = XtParent (widget); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9287 f = x_any_window_to_frame (dpyinfo, XtWindow (widget)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9288 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9289 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9290 #endif /* USE_MOTIF */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9291 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9292 if (f != 0) |
286 | 9293 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9294 KeySym keysym, orig_keysym; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9295 /* al%imercury@uunet.uu.net says that making this 81 instead of |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9296 80 fixed a bug whereby meta chars made his Emacs hang. */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9297 unsigned char copy_buffer[81]; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9298 int modifiers; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9299 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9300 event.xkey.state |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9301 |= x_emacs_to_x_modifiers (FRAME_X_DISPLAY_INFO (f), |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9302 extra_keyboard_modifiers); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9303 modifiers = event.xkey.state; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9304 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9305 /* This will have to go some day... */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9306 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9307 /* make_lispy_event turns chars into control chars. |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9308 Don't do it here because XLookupString is too eager. */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9309 event.xkey.state &= ~ControlMask; |
12431
80a5aedfb4c7
(XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents:
12192
diff
changeset
|
9310 event.xkey.state &= ~(dpyinfo->meta_mod_mask |
80a5aedfb4c7
(XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents:
12192
diff
changeset
|
9311 | dpyinfo->super_mod_mask |
80a5aedfb4c7
(XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents:
12192
diff
changeset
|
9312 | dpyinfo->hyper_mod_mask |
80a5aedfb4c7
(XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents:
12192
diff
changeset
|
9313 | dpyinfo->alt_mod_mask); |
80a5aedfb4c7
(XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents:
12192
diff
changeset
|
9314 |
16483
1b53fdb98184
(XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents:
16430
diff
changeset
|
9315 /* In case Meta is ComposeCharacter, |
1b53fdb98184
(XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents:
16430
diff
changeset
|
9316 clear its status. According to Markus Ehrnsperger |
1b53fdb98184
(XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents:
16430
diff
changeset
|
9317 Markus.Ehrnsperger@lehrstuhl-bross.physik.uni-muenchen.de |
1b53fdb98184
(XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents:
16430
diff
changeset
|
9318 this enables ComposeCharacter to work whether or |
1b53fdb98184
(XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents:
16430
diff
changeset
|
9319 not it is combined with Meta. */ |
1b53fdb98184
(XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents:
16430
diff
changeset
|
9320 if (modifiers & dpyinfo->meta_mod_mask) |
1b53fdb98184
(XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents:
16430
diff
changeset
|
9321 bzero (&compose_status, sizeof (compose_status)); |
1b53fdb98184
(XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents:
16430
diff
changeset
|
9322 |
13232
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9323 #ifdef HAVE_X_I18N |
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9324 if (FRAME_XIC (f)) |
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9325 { |
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9326 nbytes = XmbLookupString (FRAME_XIC (f), |
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9327 &event.xkey, copy_buffer, |
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9328 80, &keysym, |
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9329 &status_return); |
23567
5a0cdfd791a2
(XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents:
23515
diff
changeset
|
9330 if (status_return == XLookupNone) |
5a0cdfd791a2
(XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents:
23515
diff
changeset
|
9331 break; |
5a0cdfd791a2
(XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents:
23515
diff
changeset
|
9332 else if (status_return == XLookupChars) |
5a0cdfd791a2
(XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents:
23515
diff
changeset
|
9333 keysym = NoSymbol; |
5a0cdfd791a2
(XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents:
23515
diff
changeset
|
9334 else if (status_return != XLookupKeySym |
5a0cdfd791a2
(XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents:
23515
diff
changeset
|
9335 && status_return != XLookupBoth) |
5a0cdfd791a2
(XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents:
23515
diff
changeset
|
9336 abort (); |
13232
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9337 } |
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9338 else |
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9339 nbytes = XLookupString (&event.xkey, copy_buffer, |
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9340 80, &keysym, &compose_status); |
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9341 #else |
10287
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
9342 nbytes = XLookupString (&event.xkey, copy_buffer, |
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
9343 80, &keysym, &compose_status); |
13232
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9344 #endif |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9345 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9346 orig_keysym = keysym; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9347 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9348 if (numchars > 1) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9349 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9350 if (((keysym >= XK_BackSpace && keysym <= XK_Escape) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9351 || keysym == XK_Delete |
17227
d11d6c9a48e8
(XTread_socket): Handle ISO_Left_Tab.
Richard M. Stallman <rms@gnu.org>
parents:
17194
diff
changeset
|
9352 #ifdef XK_ISO_Left_Tab |
17232
4604d19bd730
(XTread_socket): Accept XK_ISO_* keys.
Richard M. Stallman <rms@gnu.org>
parents:
17227
diff
changeset
|
9353 || (keysym >= XK_ISO_Left_Tab && keysym <= XK_ISO_Enter) |
17227
d11d6c9a48e8
(XTread_socket): Handle ISO_Left_Tab.
Richard M. Stallman <rms@gnu.org>
parents:
17194
diff
changeset
|
9354 #endif |
22400
8fbe6f509385
(XTread_socket): Accept Japanese XK keysyms.
Richard M. Stallman <rms@gnu.org>
parents:
22230
diff
changeset
|
9355 || (keysym >= XK_Kanji && keysym <= XK_Eisu_toggle) |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9356 || IsCursorKey (keysym) /* 0xff50 <= x < 0xff60 */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9357 || IsMiscFunctionKey (keysym) /* 0xff60 <= x < VARIES */ |
3218
0069a30d083f
(XTread_socket, case KeyPress) [HPUX]:
Richard M. Stallman <rms@gnu.org>
parents:
3135
diff
changeset
|
9358 #ifdef HPUX |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9359 /* This recognizes the "extended function keys". |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9360 It seems there's no cleaner way. |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9361 Test IsModifierKey to avoid handling mode_switch |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9362 incorrectly. */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9363 || ((unsigned) (keysym) >= XK_Select |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9364 && (unsigned)(keysym) < XK_KP_Space) |
3218
0069a30d083f
(XTread_socket, case KeyPress) [HPUX]:
Richard M. Stallman <rms@gnu.org>
parents:
3135
diff
changeset
|
9365 #endif |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9366 #ifdef XK_dead_circumflex |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9367 || orig_keysym == XK_dead_circumflex |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9368 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9369 #ifdef XK_dead_grave |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9370 || orig_keysym == XK_dead_grave |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9371 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9372 #ifdef XK_dead_tilde |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9373 || orig_keysym == XK_dead_tilde |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9374 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9375 #ifdef XK_dead_diaeresis |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9376 || orig_keysym == XK_dead_diaeresis |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9377 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9378 #ifdef XK_dead_macron |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9379 || orig_keysym == XK_dead_macron |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9380 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9381 #ifdef XK_dead_degree |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9382 || orig_keysym == XK_dead_degree |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9383 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9384 #ifdef XK_dead_acute |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9385 || orig_keysym == XK_dead_acute |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9386 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9387 #ifdef XK_dead_cedilla |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9388 || orig_keysym == XK_dead_cedilla |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9389 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9390 #ifdef XK_dead_breve |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9391 || orig_keysym == XK_dead_breve |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9392 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9393 #ifdef XK_dead_ogonek |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9394 || orig_keysym == XK_dead_ogonek |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9395 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9396 #ifdef XK_dead_caron |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9397 || orig_keysym == XK_dead_caron |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9398 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9399 #ifdef XK_dead_doubleacute |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9400 || orig_keysym == XK_dead_doubleacute |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9401 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9402 #ifdef XK_dead_abovedot |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9403 || orig_keysym == XK_dead_abovedot |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9404 #endif |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9405 || IsKeypadKey (keysym) /* 0xff80 <= x < 0xffbe */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9406 || IsFunctionKey (keysym) /* 0xffbe <= x < 0xffe1 */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9407 /* Any "vendor-specific" key is ok. */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9408 || (orig_keysym & (1 << 28))) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9409 && ! (IsModifierKey (orig_keysym) |
4244
bc70363458c3
(XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents:
4147
diff
changeset
|
9410 #ifndef HAVE_X11R5 |
bc70363458c3
(XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents:
4147
diff
changeset
|
9411 #ifdef XK_Mode_switch |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9412 || ((unsigned)(orig_keysym) == XK_Mode_switch) |
4244
bc70363458c3
(XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents:
4147
diff
changeset
|
9413 #endif |
bc70363458c3
(XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents:
4147
diff
changeset
|
9414 #ifdef XK_Num_Lock |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9415 || ((unsigned)(orig_keysym) == XK_Num_Lock) |
4244
bc70363458c3
(XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents:
4147
diff
changeset
|
9416 #endif |
bc70363458c3
(XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents:
4147
diff
changeset
|
9417 #endif /* not HAVE_X11R5 */ |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9418 )) |
286 | 9419 { |
2064 | 9420 if (temp_index == sizeof temp_buffer / sizeof (short)) |
9421 temp_index = 0; | |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9422 temp_buffer[temp_index++] = keysym; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9423 bufp->kind = non_ascii_keystroke; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9424 bufp->code = keysym; |
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
9425 XSETFRAME (bufp->frame_or_window, f); |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
9426 bufp->modifiers |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
9427 = x_x_to_emacs_modifiers (FRAME_X_DISPLAY_INFO (f), |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
9428 modifiers); |
708 | 9429 bufp->timestamp = event.xkey.time; |
286 | 9430 bufp++; |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9431 count++; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9432 numchars--; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9433 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9434 if (display_busy_cursor_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9435 if (keysym != XK_Return || minibuf_level == 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9436 inhibit_busy_cursor = 2; |
286 | 9437 } |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9438 else if (numchars > nbytes) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9439 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9440 register int i; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9441 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9442 for (i = 0; i < nbytes; i++) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9443 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9444 if (temp_index == sizeof temp_buffer / sizeof (short)) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9445 temp_index = 0; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9446 temp_buffer[temp_index++] = copy_buffer[i]; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9447 bufp->kind = ascii_keystroke; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9448 bufp->code = copy_buffer[i]; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9449 XSETFRAME (bufp->frame_or_window, f); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9450 bufp->modifiers |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9451 = x_x_to_emacs_modifiers (FRAME_X_DISPLAY_INFO (f), |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9452 modifiers); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9453 bufp->timestamp = event.xkey.time; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9454 bufp++; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9455 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9456 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9457 count += nbytes; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9458 numchars -= nbytes; |
23567
5a0cdfd791a2
(XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents:
23515
diff
changeset
|
9459 |
5a0cdfd791a2
(XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents:
23515
diff
changeset
|
9460 if (keysym == NoSymbol) |
5a0cdfd791a2
(XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents:
23515
diff
changeset
|
9461 break; |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9462 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9463 else |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9464 abort (); |
286 | 9465 } |
2064 | 9466 else |
9467 abort (); | |
286 | 9468 } |
13898
dceb33c07f9e
(XTread_socket): Pass KeyPress events to the toolkit.
Richard M. Stallman <rms@gnu.org>
parents:
13884
diff
changeset
|
9469 goto OTHER; |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9470 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9471 /* Here's a possible interpretation of the whole |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9472 FocusIn-EnterNotify FocusOut-LeaveNotify mess. If |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9473 you get a FocusIn event, you have to get a FocusOut |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9474 event before you relinquish the focus. If you |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9475 haven't received a FocusIn event, then a mere |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9476 LeaveNotify is enough to free you. */ |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9477 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9478 case EnterNotify: |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9479 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9480 int from_menu_bar_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9481 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9482 f = x_any_window_to_frame (dpyinfo, event.xcrossing.window); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9483 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9484 #ifdef LESSTIF_VERSION |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9485 /* When clicking outside of a menu bar popup to close |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9486 it, we get a FocusIn/ EnterNotify sequence of |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9487 events. The flag event.xcrossing.focus is not set |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9488 in the EnterNotify event of that sequence because |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9489 the focus is in the menu bar, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9490 event.xcrossing.window is the frame's X window. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9491 Unconditionally setting the focus frame to null in |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9492 this case is not the right thing, because no event |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9493 follows that could set the focus frame to the right |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9494 value. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9495 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9496 This could be a LessTif bug, but I wasn't able to |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9497 reproduce the behavior in a simple test program. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9498 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9499 (gerd, LessTif 0.88.1). */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9500 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9501 if (!event.xcrossing.focus |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9502 && f |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9503 && f->output_data.x->menubar_widget) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9504 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9505 Window focus; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9506 int revert; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9507 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9508 XGetInputFocus (FRAME_X_DISPLAY (f), &focus, &revert); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9509 if (focus == XtWindow (f->output_data.x->menubar_widget)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9510 from_menu_bar_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9511 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9512 #endif /* LESSTIF_VERSION */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9513 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9514 if (event.xcrossing.focus || from_menu_bar_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9515 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9516 /* Avoid nasty pop/raise loops. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9517 if (f && (!(f->auto_raise) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9518 || !(f->auto_lower) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9519 || (event.xcrossing.time - enter_timestamp) > 500)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9520 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9521 x_new_focus_frame (dpyinfo, f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9522 enter_timestamp = event.xcrossing.time; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9523 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9524 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9525 else if (f == dpyinfo->x_focus_frame) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9526 x_new_focus_frame (dpyinfo, 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9527 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9528 /* EnterNotify counts as mouse movement, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9529 so update things that depend on mouse position. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9530 if (f && !f->output_data.x->busy_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9531 note_mouse_movement (f, &event.xmotion); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9532 goto OTHER; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9533 } |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9534 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9535 case FocusIn: |
11198
571306c7b038
New arg DPYINFO to all callers of x_window_to_frame, x_any_window_to_frame,
Karl Heuer <kwzh@gnu.org>
parents:
11166
diff
changeset
|
9536 f = x_any_window_to_frame (dpyinfo, event.xfocus.window); |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9537 if (event.xfocus.detail != NotifyPointer) |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
9538 dpyinfo->x_focus_event_frame = f; |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9539 if (f) |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
9540 x_new_focus_frame (dpyinfo, f); |
13205
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
9541 |
13232
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9542 #ifdef HAVE_X_I18N |
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9543 if (f && FRAME_XIC (f)) |
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9544 XSetICFocus (FRAME_XIC (f)); |
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9545 #endif |
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9546 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9547 goto OTHER; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9548 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9549 case LeaveNotify: |
11198
571306c7b038
New arg DPYINFO to all callers of x_window_to_frame, x_any_window_to_frame,
Karl Heuer <kwzh@gnu.org>
parents:
11166
diff
changeset
|
9550 f = x_top_window_to_frame (dpyinfo, event.xcrossing.window); |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9551 if (f) |
7169
c21fcad6f1f5
(XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents:
7167
diff
changeset
|
9552 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9553 Lisp_Object frame; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9554 int from_menu_bar_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9555 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9556 if (f == dpyinfo->mouse_face_mouse_frame) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9557 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9558 /* If we move outside the frame, then we're |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9559 certainly no longer on any text in the frame. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9560 clear_mouse_face (dpyinfo); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9561 dpyinfo->mouse_face_mouse_frame = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9562 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9563 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9564 /* Generate a nil HELP_EVENT to cancel a help-echo. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9565 Do it only if there's something to cancel. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9566 Otherwise, the startup message is cleared when |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9567 the mouse leaves the frame. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9568 if (any_help_event_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9569 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9570 XSETFRAME (frame, f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9571 bufp->kind = HELP_EVENT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9572 bufp->frame_or_window = Fcons (frame, Qnil); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9573 ++bufp, ++count, --numchars; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9574 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9575 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9576 #ifdef LESSTIF_VERSION |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9577 /* Please see the comment at the start of the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9578 EnterNotify case. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9579 if (!event.xcrossing.focus |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9580 && f->output_data.x->menubar_widget) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9581 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9582 Window focus; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9583 int revert; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9584 XGetInputFocus (FRAME_X_DISPLAY (f), &focus, &revert); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9585 if (focus == XtWindow (f->output_data.x->menubar_widget)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9586 from_menu_bar_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9587 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9588 #endif /* LESSTIF_VERSION */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9589 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9590 if (event.xcrossing.focus || from_menu_bar_p) |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
9591 x_mouse_leave (dpyinfo); |
7169
c21fcad6f1f5
(XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents:
7167
diff
changeset
|
9592 else |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9593 { |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
9594 if (f == dpyinfo->x_focus_event_frame) |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
9595 dpyinfo->x_focus_event_frame = 0; |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
9596 if (f == dpyinfo->x_focus_frame) |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
9597 x_new_focus_frame (dpyinfo, 0); |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9598 } |
7169
c21fcad6f1f5
(XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents:
7167
diff
changeset
|
9599 } |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9600 goto OTHER; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9601 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9602 case FocusOut: |
11198
571306c7b038
New arg DPYINFO to all callers of x_window_to_frame, x_any_window_to_frame,
Karl Heuer <kwzh@gnu.org>
parents:
11166
diff
changeset
|
9603 f = x_any_window_to_frame (dpyinfo, event.xfocus.window); |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9604 if (event.xfocus.detail != NotifyPointer |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
9605 && f == dpyinfo->x_focus_event_frame) |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
9606 dpyinfo->x_focus_event_frame = 0; |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
9607 if (f && f == dpyinfo->x_focus_frame) |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
9608 x_new_focus_frame (dpyinfo, 0); |
13205
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
9609 |
13232
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9610 #ifdef HAVE_X_I18N |
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9611 if (f && FRAME_XIC (f)) |
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9612 XUnsetICFocus (FRAME_XIC (f)); |
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9613 #endif |
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9614 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9615 goto OTHER; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9616 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9617 case MotionNotify: |
286 | 9618 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9619 previous_help_echo = help_echo; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9620 help_echo = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9621 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9622 if (dpyinfo->grabbed && last_mouse_frame |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9623 && FRAME_LIVE_P (last_mouse_frame)) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9624 f = last_mouse_frame; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9625 else |
11198
571306c7b038
New arg DPYINFO to all callers of x_window_to_frame, x_any_window_to_frame,
Karl Heuer <kwzh@gnu.org>
parents:
11166
diff
changeset
|
9626 f = x_window_to_frame (dpyinfo, event.xmotion.window); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9627 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9628 if (f) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9629 note_mouse_movement (f, &event.xmotion); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9630 else |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9631 { |
25795
84921c27b2b5
(XTread_socket) <MotionNotify>: Change #ifdef
Gerd Moellmann <gerd@gnu.org>
parents:
25716
diff
changeset
|
9632 #ifndef USE_TOOLKIT_SCROLL_BARS |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9633 struct scroll_bar *bar |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9634 = x_window_to_scroll_bar (event.xmotion.window); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9635 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9636 if (bar) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9637 x_scroll_bar_note_movement (bar, &event); |
25795
84921c27b2b5
(XTread_socket) <MotionNotify>: Change #ifdef
Gerd Moellmann <gerd@gnu.org>
parents:
25716
diff
changeset
|
9638 #endif /* USE_TOOLKIT_SCROLL_BARS */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9639 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9640 /* If we move outside the frame, then we're |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9641 certainly no longer on any text in the frame. */ |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9642 clear_mouse_face (dpyinfo); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9643 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9644 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9645 /* If the contents of the global variable help_echo |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9646 has changed, generate a HELP_EVENT. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9647 if (STRINGP (help_echo) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9648 || STRINGP (previous_help_echo)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9649 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9650 Lisp_Object frame; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9651 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9652 if (f) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9653 XSETFRAME (frame, f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9654 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9655 frame = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9656 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9657 any_help_event_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9658 bufp->kind = HELP_EVENT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9659 bufp->frame_or_window = Fcons (frame, help_echo); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9660 ++bufp, ++count, --numchars; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9661 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9662 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9663 goto OTHER; |
286 | 9664 } |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9665 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9666 case ConfigureNotify: |
17953
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
9667 f = x_top_window_to_frame (dpyinfo, event.xconfigure.window); |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
9668 if (f) |
3030
2c5ea1c98256
(XTread_socket): For ConfigureNotify event,
Richard M. Stallman <rms@gnu.org>
parents:
3016
diff
changeset
|
9669 { |
25716
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
9670 #ifndef USE_X_TOOLKIT |
24489
abf5b4802f9b
(XTread_socket) <ConfigureNotify>:
Karl Heuer <kwzh@gnu.org>
parents:
24484
diff
changeset
|
9671 int rows = PIXEL_TO_CHAR_HEIGHT (f, event.xconfigure.height); |
abf5b4802f9b
(XTread_socket) <ConfigureNotify>:
Karl Heuer <kwzh@gnu.org>
parents:
24484
diff
changeset
|
9672 int columns = PIXEL_TO_CHAR_WIDTH (f, event.xconfigure.width); |
25716
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
9673 |
11436
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
9674 /* In the toolkit version, change_frame_size |
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
9675 is called by the code that handles resizing |
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
9676 of the EmacsFrame widget. */ |
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
9677 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9678 /* Even if the number of character rows and columns has |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9679 not changed, the font size may have changed, so we need |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9680 to check the pixel dimensions as well. */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9681 if (columns != f->width |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9682 || rows != f->height |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
9683 || event.xconfigure.width != f->output_data.x->pixel_width |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
9684 || event.xconfigure.height != f->output_data.x->pixel_height) |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9685 { |
25360
2f3ad0a21be5
Call change_frame_size and do_pending_window_change with
Gerd Moellmann <gerd@gnu.org>
parents:
25328
diff
changeset
|
9686 change_frame_size (f, rows, columns, 0, 1, 0); |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9687 SET_FRAME_GARBAGED (f); |
16491
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
9688 cancel_mouse_face (f); |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9689 } |
11436
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
9690 #endif |
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
9691 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
9692 f->output_data.x->pixel_width = event.xconfigure.width; |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
9693 f->output_data.x->pixel_height = event.xconfigure.height; |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9694 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9695 /* What we have now is the position of Emacs's own window. |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9696 Convert that to the position of the window manager window. */ |
18008
d25d2472df51
(XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents:
17963
diff
changeset
|
9697 x_real_positions (f, &f->output_data.x->left_pos, |
d25d2472df51
(XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents:
17963
diff
changeset
|
9698 &f->output_data.x->top_pos); |
d25d2472df51
(XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents:
17963
diff
changeset
|
9699 |
d25d2472df51
(XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents:
17963
diff
changeset
|
9700 if (f->output_data.x->parent_desc != FRAME_X_DISPLAY_INFO (f)->root_window) |
d25d2472df51
(XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents:
17963
diff
changeset
|
9701 { |
d25d2472df51
(XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents:
17963
diff
changeset
|
9702 /* Since the WM decorations come below top_pos now, |
d25d2472df51
(XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents:
17963
diff
changeset
|
9703 we must put them below top_pos in the future. */ |
d25d2472df51
(XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents:
17963
diff
changeset
|
9704 f->output_data.x->win_gravity = NorthWestGravity; |
d25d2472df51
(XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents:
17963
diff
changeset
|
9705 x_wm_set_size_hint (f, (long) 0, 0); |
d25d2472df51
(XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents:
17963
diff
changeset
|
9706 } |
20182
9f3dd970927e
(XTread_socket): Check for bogus (0,0) location.
Karl Heuer <kwzh@gnu.org>
parents:
20180
diff
changeset
|
9707 #ifdef USE_MOTIF |
9f3dd970927e
(XTread_socket): Check for bogus (0,0) location.
Karl Heuer <kwzh@gnu.org>
parents:
20180
diff
changeset
|
9708 /* Some window managers pass (0,0) as the location of |
9f3dd970927e
(XTread_socket): Check for bogus (0,0) location.
Karl Heuer <kwzh@gnu.org>
parents:
20180
diff
changeset
|
9709 the window, and the Motif event handler stores it |
9f3dd970927e
(XTread_socket): Check for bogus (0,0) location.
Karl Heuer <kwzh@gnu.org>
parents:
20180
diff
changeset
|
9710 in the emacs widget, which messes up Motif menus. */ |
9f3dd970927e
(XTread_socket): Check for bogus (0,0) location.
Karl Heuer <kwzh@gnu.org>
parents:
20180
diff
changeset
|
9711 if (event.xconfigure.x == 0 && event.xconfigure.y == 0) |
9f3dd970927e
(XTread_socket): Check for bogus (0,0) location.
Karl Heuer <kwzh@gnu.org>
parents:
20180
diff
changeset
|
9712 { |
9f3dd970927e
(XTread_socket): Check for bogus (0,0) location.
Karl Heuer <kwzh@gnu.org>
parents:
20180
diff
changeset
|
9713 event.xconfigure.x = f->output_data.x->widget->core.x; |
9f3dd970927e
(XTread_socket): Check for bogus (0,0) location.
Karl Heuer <kwzh@gnu.org>
parents:
20180
diff
changeset
|
9714 event.xconfigure.y = f->output_data.x->widget->core.y; |
9f3dd970927e
(XTread_socket): Check for bogus (0,0) location.
Karl Heuer <kwzh@gnu.org>
parents:
20180
diff
changeset
|
9715 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9716 #endif /* USE_MOTIF */ |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9717 } |
11436
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
9718 goto OTHER; |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9719 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9720 case ButtonPress: |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9721 case ButtonRelease: |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
9722 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9723 /* If we decide we want to generate an event to be seen |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9724 by the rest of Emacs, we put it here. */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9725 struct input_event emacs_event; |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
9726 int tool_bar_p = 0; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9727 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9728 emacs_event.kind = no_event; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9729 bzero (&compose_status, sizeof (compose_status)); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9730 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9731 if (dpyinfo->grabbed |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9732 && last_mouse_frame |
10274
83aaf59dabbe
(XTupdate_begin): Fix backward test in previous change.
Richard M. Stallman <rms@gnu.org>
parents:
10223
diff
changeset
|
9733 && FRAME_LIVE_P (last_mouse_frame)) |
83aaf59dabbe
(XTupdate_begin): Fix backward test in previous change.
Richard M. Stallman <rms@gnu.org>
parents:
10223
diff
changeset
|
9734 f = last_mouse_frame; |
83aaf59dabbe
(XTupdate_begin): Fix backward test in previous change.
Richard M. Stallman <rms@gnu.org>
parents:
10223
diff
changeset
|
9735 else |
12657
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9736 f = x_window_to_frame (dpyinfo, event.xbutton.window); |
10274
83aaf59dabbe
(XTupdate_begin): Fix backward test in previous change.
Richard M. Stallman <rms@gnu.org>
parents:
10223
diff
changeset
|
9737 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9738 if (f) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9739 { |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
9740 /* Is this in the tool-bar? */ |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
9741 if (WINDOWP (f->tool_bar_window) |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
9742 && XFASTINT (XWINDOW (f->tool_bar_window)->height)) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9743 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9744 Lisp_Object window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9745 int p, x, y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9746 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9747 x = event.xbutton.x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9748 y = event.xbutton.y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9749 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9750 /* Set x and y. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9751 window = window_from_coordinates (f, x, y, &p, 1); |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
9752 if (EQ (window, f->tool_bar_window)) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9753 { |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
9754 x_handle_tool_bar_click (f, &event.xbutton); |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
9755 tool_bar_p = 1; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9756 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9757 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9758 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
9759 if (!tool_bar_p) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9760 if (!dpyinfo->x_focus_frame |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9761 || f == dpyinfo->x_focus_frame) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9762 construct_mouse_click (&emacs_event, &event, f); |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9763 } |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
9764 else |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
9765 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9766 #ifndef USE_TOOLKIT_SCROLL_BARS |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9767 struct scroll_bar *bar |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9768 = x_window_to_scroll_bar (event.xbutton.window); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9769 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9770 if (bar) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9771 x_scroll_bar_handle_click (bar, &event, &emacs_event); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9772 #endif /* not USE_TOOLKIT_SCROLL_BARS */ |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9773 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9774 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9775 if (event.type == ButtonPress) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9776 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9777 dpyinfo->grabbed |= (1 << event.xbutton.button); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9778 last_mouse_frame = f; |
23643
701b6bdc7a22
(XTread_socket): ButtonPress clears f->mouse_moved.
Karl Heuer <kwzh@gnu.org>
parents:
23567
diff
changeset
|
9779 /* Ignore any mouse motion that happened |
701b6bdc7a22
(XTread_socket): ButtonPress clears f->mouse_moved.
Karl Heuer <kwzh@gnu.org>
parents:
23567
diff
changeset
|
9780 before this event; any subsequent mouse-movement |
701b6bdc7a22
(XTread_socket): ButtonPress clears f->mouse_moved.
Karl Heuer <kwzh@gnu.org>
parents:
23567
diff
changeset
|
9781 Emacs events should reflect only motion after |
701b6bdc7a22
(XTread_socket): ButtonPress clears f->mouse_moved.
Karl Heuer <kwzh@gnu.org>
parents:
23567
diff
changeset
|
9782 the ButtonPress. */ |
23701
6c0896abbbd4
(XTread_socket): Fix previous change in case F == 0.
Karl Heuer <kwzh@gnu.org>
parents:
23684
diff
changeset
|
9783 if (f != 0) |
6c0896abbbd4
(XTread_socket): Fix previous change in case F == 0.
Karl Heuer <kwzh@gnu.org>
parents:
23684
diff
changeset
|
9784 f->mouse_moved = 0; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9785 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
9786 if (!tool_bar_p) |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
9787 last_tool_bar_item = -1; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9788 if (display_busy_cursor_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9789 inhibit_busy_cursor = 2; |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9790 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9791 else |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9792 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9793 dpyinfo->grabbed &= ~(1 << event.xbutton.button); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9794 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9795 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9796 if (numchars >= 1 && emacs_event.kind != no_event) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9797 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9798 bcopy (&emacs_event, bufp, sizeof (struct input_event)); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9799 bufp++; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9800 count++; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9801 numchars--; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9802 } |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
9803 |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
9804 #ifdef USE_X_TOOLKIT |
12657
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9805 f = x_menubar_window_to_frame (dpyinfo, event.xbutton.window); |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9806 /* For a down-event in the menu bar, |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9807 don't pass it to Xt right now. |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9808 Instead, save it away |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9809 and we will pass it to Xt from kbd_buffer_get_event. |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9810 That way, we can run some Lisp code first. */ |
13561
21b6b8f50143
(XTread_socket): Verify a ButtonPress was actually in the
Richard M. Stallman <rms@gnu.org>
parents:
13507
diff
changeset
|
9811 if (f && event.type == ButtonPress |
21b6b8f50143
(XTread_socket): Verify a ButtonPress was actually in the
Richard M. Stallman <rms@gnu.org>
parents:
13507
diff
changeset
|
9812 /* Verify the event is really within the menu bar |
21b6b8f50143
(XTread_socket): Verify a ButtonPress was actually in the
Richard M. Stallman <rms@gnu.org>
parents:
13507
diff
changeset
|
9813 and not just sent to it due to grabbing. */ |
21b6b8f50143
(XTread_socket): Verify a ButtonPress was actually in the
Richard M. Stallman <rms@gnu.org>
parents:
13507
diff
changeset
|
9814 && event.xbutton.x >= 0 |
21b6b8f50143
(XTread_socket): Verify a ButtonPress was actually in the
Richard M. Stallman <rms@gnu.org>
parents:
13507
diff
changeset
|
9815 && event.xbutton.x < f->output_data.x->pixel_width |
21b6b8f50143
(XTread_socket): Verify a ButtonPress was actually in the
Richard M. Stallman <rms@gnu.org>
parents:
13507
diff
changeset
|
9816 && event.xbutton.y >= 0 |
21b6b8f50143
(XTread_socket): Verify a ButtonPress was actually in the
Richard M. Stallman <rms@gnu.org>
parents:
13507
diff
changeset
|
9817 && event.xbutton.y < f->output_data.x->menubar_height |
21b6b8f50143
(XTread_socket): Verify a ButtonPress was actually in the
Richard M. Stallman <rms@gnu.org>
parents:
13507
diff
changeset
|
9818 && event.xbutton.same_screen) |
12657
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9819 { |
15711
099dc465c948
(SET_SAVED_MENU_EVENT): New macro.
Karl Heuer <kwzh@gnu.org>
parents:
15639
diff
changeset
|
9820 SET_SAVED_BUTTON_EVENT; |
15803
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
9821 XSETFRAME (last_mouse_press_frame, f); |
15793
fc460a98a7f9
(last_mouse_press_frame): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15711
diff
changeset
|
9822 } |
15803
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
9823 else if (event.type == ButtonPress) |
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
9824 { |
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
9825 last_mouse_press_frame = Qnil; |
15808
3afa38a18102
(XTread_socket): Delete the code to pass menu bar keys
Richard M. Stallman <rms@gnu.org>
parents:
15806
diff
changeset
|
9826 goto OTHER; |
15803
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
9827 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9828 |
15803
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
9829 #ifdef USE_MOTIF /* This should do not harm for Lucid, |
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
9830 but I am trying to be cautious. */ |
15793
fc460a98a7f9
(last_mouse_press_frame): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15711
diff
changeset
|
9831 else if (event.type == ButtonRelease) |
fc460a98a7f9
(last_mouse_press_frame): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15711
diff
changeset
|
9832 { |
15803
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
9833 if (!NILP (last_mouse_press_frame)) |
15794 | 9834 { |
15803
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
9835 f = XFRAME (last_mouse_press_frame); |
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
9836 if (f->output_data.x) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9837 SET_SAVED_BUTTON_EVENT; |
15794 | 9838 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9839 else |
15808
3afa38a18102
(XTread_socket): Delete the code to pass menu bar keys
Richard M. Stallman <rms@gnu.org>
parents:
15806
diff
changeset
|
9840 goto OTHER; |
12657
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9841 } |
15803
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
9842 #endif /* USE_MOTIF */ |
12657
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9843 else |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9844 goto OTHER; |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
9845 #endif /* USE_X_TOOLKIT */ |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9846 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9847 break; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9848 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9849 case CirculateNotify: |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9850 goto OTHER; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9851 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9852 case CirculateRequest: |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9853 goto OTHER; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9854 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9855 case VisibilityNotify: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9856 goto OTHER; |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9857 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9858 case MappingNotify: |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9859 /* Someone has changed the keyboard mapping - update the |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9860 local cache. */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9861 switch (event.xmapping.request) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9862 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9863 case MappingModifier: |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9864 x_find_modifier_meanings (dpyinfo); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9865 /* This is meant to fall through. */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9866 case MappingKeyboard: |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9867 XRefreshKeyboardMapping (&event.xmapping); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9868 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9869 goto OTHER; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9870 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9871 default: |
13898
dceb33c07f9e
(XTread_socket): Pass KeyPress events to the toolkit.
Richard M. Stallman <rms@gnu.org>
parents:
13884
diff
changeset
|
9872 OTHER: |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9873 #ifdef USE_X_TOOLKIT |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9874 BLOCK_INPUT; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9875 XtDispatchEvent (&event); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9876 UNBLOCK_INPUT; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9877 #endif /* USE_X_TOOLKIT */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9878 break; |
1436
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
9879 } |
286 | 9880 } |
9881 } | |
9882 | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9883 out:; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9884 |
8485
6e4b40c80021
(XTread_socket): Don't test X_IO_BUG; make that code unconditional.
Richard M. Stallman <rms@gnu.org>
parents:
8437
diff
changeset
|
9885 /* On some systems, an X bug causes Emacs to get no more events |
6e4b40c80021
(XTread_socket): Don't test X_IO_BUG; make that code unconditional.
Richard M. Stallman <rms@gnu.org>
parents:
8437
diff
changeset
|
9886 when the window is destroyed. Detect that. (1994.) */ |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
9887 if (! event_found) |
7916
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
9888 { |
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
9889 /* Emacs and the X Server eats up CPU time if XNoOp is done every time. |
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
9890 One XNOOP in 100 loops will make Emacs terminate. |
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
9891 B. Bretthauer, 1994 */ |
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
9892 x_noop_count++; |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
9893 if (x_noop_count >= 100) |
7916
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
9894 { |
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
9895 x_noop_count=0; |
12657
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9896 |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9897 if (next_noop_dpyinfo == 0) |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9898 next_noop_dpyinfo = x_display_list; |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9899 |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9900 XNoOp (next_noop_dpyinfo->display); |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9901 |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9902 /* Each time we get here, cycle through the displays now open. */ |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9903 next_noop_dpyinfo = next_noop_dpyinfo->next; |
7916
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
9904 } |
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
9905 } |
5753
eb44ecad5557
(XTread_socket): Add X_IO_BUG conditional.
Richard M. Stallman <rms@gnu.org>
parents:
5740
diff
changeset
|
9906 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9907 /* If the focus was just given to an auto-raising frame, |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
9908 raise it now. */ |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9909 /* ??? This ought to be able to handle more than one such frame. */ |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
9910 if (pending_autoraise_frame) |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
9911 { |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
9912 x_raise_frame (pending_autoraise_frame); |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
9913 pending_autoraise_frame = 0; |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
9914 } |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
9915 |
286 | 9916 UNBLOCK_INPUT; |
9917 return count; | |
9918 } | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9919 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9920 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9921 |
286 | 9922 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9923 /*********************************************************************** |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9924 Text Cursor |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9925 ***********************************************************************/ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9926 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9927 /* Note if the text cursor of window W has been overwritten by a |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9928 drawing operation that outputs N glyphs starting at HPOS in the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9929 line given by output_cursor.vpos. N < 0 means all the rest of the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9930 line after HPOS has been written. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9931 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9932 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9933 note_overwritten_text_cursor (w, hpos, n) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9934 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9935 int hpos, n; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9936 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9937 if (updated_area == TEXT_AREA |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9938 && output_cursor.vpos == w->phys_cursor.vpos |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9939 && hpos <= w->phys_cursor.hpos |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9940 && (n < 0 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9941 || hpos + n > w->phys_cursor.hpos)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9942 w->phys_cursor_on_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9943 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9944 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9945 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9946 /* Set clipping for output in glyph row ROW. W is the window in which |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9947 we operate. GC is the graphics context to set clipping in. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9948 WHOLE_LINE_P non-zero means include the areas used for truncation |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9949 mark display and alike in the clipping rectangle. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9950 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9951 ROW may be a text row or, e.g., a mode line. Text rows must be |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9952 clipped to the interior of the window dedicated to text display, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9953 mode lines must be clipped to the whole window. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9954 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9955 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9956 x_clip_to_row (w, row, gc, whole_line_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9957 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9958 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9959 GC gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9960 int whole_line_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9961 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9962 struct frame *f = XFRAME (WINDOW_FRAME (w)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9963 XRectangle clip_rect; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9964 int window_x, window_y, window_width, window_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9965 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9966 window_box (w, -1, &window_x, &window_y, &window_width, &window_height); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9967 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9968 clip_rect.x = WINDOW_TO_FRAME_PIXEL_X (w, 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9969 clip_rect.y = WINDOW_TO_FRAME_PIXEL_Y (w, row->y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9970 clip_rect.y = max (clip_rect.y, window_y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9971 clip_rect.width = window_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9972 clip_rect.height = row->visible_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9973 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9974 /* If clipping to the whole line, including trunc marks, extend |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9975 the rectangle to the left and increase its width. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9976 if (whole_line_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9977 { |
25465 | 9978 clip_rect.x -= FRAME_X_LEFT_FLAGS_AREA_WIDTH (f); |
9979 clip_rect.width += FRAME_X_FLAGS_AREA_WIDTH (f); | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9980 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9981 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9982 XSetClipRectangles (FRAME_X_DISPLAY (f), gc, 0, 0, &clip_rect, 1, Unsorted); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9983 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9984 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9985 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9986 /* Draw a hollow box cursor on window W in glyph row ROW. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9987 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9988 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9989 x_draw_hollow_cursor (w, row) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9990 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9991 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9992 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9993 struct frame *f = XFRAME (WINDOW_FRAME (w)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9994 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9995 Display *dpy = FRAME_X_DISPLAY (f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9996 int x, y, wd, h; |
18775
fcfa336f737e
(x_draw_box): Use scratch_cursor_gc to draw the cursor
Richard M. Stallman <rms@gnu.org>
parents:
18733
diff
changeset
|
9997 XGCValues xgcv; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9998 struct glyph *cursor_glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9999 GC gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10000 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10001 /* Compute frame-relative coordinates from window-relative |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10002 coordinates. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10003 x = WINDOW_TEXT_TO_FRAME_PIXEL_X (w, w->phys_cursor.x); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10004 y = (WINDOW_TO_FRAME_PIXEL_Y (w, w->phys_cursor.y) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10005 + row->ascent - w->phys_cursor_ascent); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10006 h = row->height - 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10007 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10008 /* Get the glyph the cursor is on. If we can't tell because |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10009 the current matrix is invalid or such, give up. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10010 cursor_glyph = get_phys_cursor_glyph (w); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10011 if (cursor_glyph == NULL) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10012 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10013 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10014 /* Compute the width of the rectangle to draw. If on a stretch |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10015 glyph, and `x-stretch-block-cursor' is nil, don't draw a |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10016 rectangle as wide as the glyph, but use a canonical character |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10017 width instead. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10018 wd = cursor_glyph->pixel_width - 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10019 if (cursor_glyph->type == STRETCH_GLYPH |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10020 && !x_stretch_cursor_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10021 wd = min (CANON_X_UNIT (f), wd); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10022 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10023 /* The foreground of cursor_gc is typically the same as the normal |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10024 background color, which can cause the cursor box to be invisible. */ |
18775
fcfa336f737e
(x_draw_box): Use scratch_cursor_gc to draw the cursor
Richard M. Stallman <rms@gnu.org>
parents:
18733
diff
changeset
|
10025 xgcv.foreground = f->output_data.x->cursor_pixel; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10026 if (dpyinfo->scratch_cursor_gc) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10027 XChangeGC (dpy, dpyinfo->scratch_cursor_gc, GCForeground, &xgcv); |
18775
fcfa336f737e
(x_draw_box): Use scratch_cursor_gc to draw the cursor
Richard M. Stallman <rms@gnu.org>
parents:
18733
diff
changeset
|
10028 else |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10029 dpyinfo->scratch_cursor_gc = XCreateGC (dpy, FRAME_X_WINDOW (f), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10030 GCForeground, &xgcv); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10031 gc = dpyinfo->scratch_cursor_gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10032 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10033 /* Set clipping, draw the rectangle, and reset clipping again. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10034 x_clip_to_row (w, row, gc, 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10035 XDrawRectangle (dpy, FRAME_X_WINDOW (f), gc, x, y, wd, h); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10036 XSetClipMask (dpy, gc, None); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10037 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10038 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10039 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10040 /* Draw a bar cursor on window W in glyph row ROW. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10041 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10042 Implementation note: One would like to draw a bar cursor with an |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10043 angle equal to the one given by the font property XA_ITALIC_ANGLE. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10044 Unfortunately, I didn't find a font yet that has this property set. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10045 --gerd. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10046 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10047 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10048 x_draw_bar_cursor (w, row) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10049 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10050 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10051 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10052 /* If cursor hpos is out of bounds, don't draw garbage. This can |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10053 happen in mini-buffer windows when switching between echo area |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10054 glyphs and mini-buffer. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10055 if (w->phys_cursor.hpos < row->used[TEXT_AREA]) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10056 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10057 struct frame *f = XFRAME (w->frame); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10058 struct glyph *cursor_glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10059 GC gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10060 int x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10061 unsigned long mask; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10062 XGCValues xgcv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10063 Display *dpy; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10064 Window window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10065 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10066 cursor_glyph = get_phys_cursor_glyph (w); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10067 if (cursor_glyph == NULL) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10068 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10069 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10070 xgcv.background = f->output_data.x->cursor_pixel; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10071 xgcv.foreground = f->output_data.x->cursor_pixel; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10072 xgcv.graphics_exposures = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10073 mask = GCForeground | GCBackground | GCGraphicsExposures; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10074 dpy = FRAME_X_DISPLAY (f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10075 window = FRAME_X_WINDOW (f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10076 gc = FRAME_X_DISPLAY_INFO (f)->scratch_cursor_gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10077 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10078 if (gc) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10079 XChangeGC (dpy, gc, mask, &xgcv); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10080 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10081 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10082 gc = XCreateGC (dpy, window, mask, &xgcv); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10083 FRAME_X_DISPLAY_INFO (f)->scratch_cursor_gc = gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10084 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10085 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10086 x = WINDOW_TEXT_TO_FRAME_PIXEL_X (w, w->phys_cursor.x); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10087 x_clip_to_row (w, row, gc, 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10088 XFillRectangle (dpy, window, gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10089 x, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10090 WINDOW_TO_FRAME_PIXEL_Y (w, w->phys_cursor.y), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10091 min (cursor_glyph->pixel_width, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10092 f->output_data.x->cursor_width), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10093 row->height); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10094 XSetClipMask (dpy, gc, None); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10095 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10096 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10097 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10098 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10099 /* Clear the cursor of window W to background color, and mark the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10100 cursor as not shown. This is used when the text where the cursor |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10101 is is about to be rewritten. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10102 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10103 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10104 x_clear_cursor (w) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10105 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10106 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10107 if (FRAME_VISIBLE_P (XFRAME (w->frame)) && w->phys_cursor_on_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10108 x_update_window_cursor (w, 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10109 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10110 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10111 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10112 /* Draw the cursor glyph of window W in glyph row ROW. See the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10113 comment of x_draw_glyphs for the meaning of HL. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10114 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10115 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10116 x_draw_phys_cursor_glyph (w, row, hl) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10117 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10118 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10119 enum draw_glyphs_face hl; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10120 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10121 /* If cursor hpos is out of bounds, don't draw garbage. This can |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10122 happen in mini-buffer windows when switching between echo area |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10123 glyphs and mini-buffer. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10124 if (w->phys_cursor.hpos < row->used[TEXT_AREA]) |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10125 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10126 x_draw_glyphs (w, w->phys_cursor.x, row, TEXT_AREA, |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10127 w->phys_cursor.hpos, w->phys_cursor.hpos + 1, |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10128 hl, 0, 0, 0); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10129 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10130 /* When we erase the cursor, and ROW is overlapped by other |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10131 rows, make sure that these overlapping parts of other rows |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10132 are redrawn. */ |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10133 if (hl == DRAW_NORMAL_TEXT && row->overlapped_p) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10134 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10135 if (row > w->current_matrix->rows |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10136 && MATRIX_ROW_OVERLAPS_SUCC_P (row - 1)) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10137 x_fix_overlapping_area (w, row - 1, TEXT_AREA); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10138 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10139 if (MATRIX_ROW_BOTTOM_Y (row) < window_text_bottom_y (w) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10140 && MATRIX_ROW_OVERLAPS_PRED_P (row + 1)) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10141 x_fix_overlapping_area (w, row + 1, TEXT_AREA); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10142 } |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10143 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10144 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10145 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10146 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10147 /* Erase the image of a cursor of window W from the screen. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10148 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10149 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10150 x_erase_phys_cursor (w) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10151 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10152 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10153 struct frame *f = XFRAME (w->frame); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10154 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10155 int hpos = w->phys_cursor.hpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10156 int vpos = w->phys_cursor.vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10157 int mouse_face_here_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10158 struct glyph_matrix *active_glyphs = w->current_matrix; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10159 struct glyph_row *cursor_row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10160 struct glyph *cursor_glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10161 enum draw_glyphs_face hl; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10162 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10163 /* No cursor displayed or row invalidated => nothing to do on the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10164 screen. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10165 if (w->phys_cursor_type == NO_CURSOR) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10166 goto mark_cursor_off; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10167 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10168 /* VPOS >= active_glyphs->nrows means that window has been resized. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10169 Don't bother to erase the cursor. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10170 if (vpos >= active_glyphs->nrows) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10171 goto mark_cursor_off; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10172 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10173 /* If row containing cursor is marked invalid, there is nothing we |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10174 can do. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10175 cursor_row = MATRIX_ROW (active_glyphs, vpos); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10176 if (!cursor_row->enabled_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10177 goto mark_cursor_off; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10178 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10179 /* This can happen when the new row is shorter than the old one. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10180 In this case, either x_draw_glyphs or clear_end_of_line |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10181 should have cleared the cursor. Note that we wouldn't be |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10182 able to erase the cursor in this case because we don't have a |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10183 cursor glyph at hand. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10184 if (w->phys_cursor.hpos >= cursor_row->used[TEXT_AREA]) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10185 goto mark_cursor_off; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10186 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10187 /* If the cursor is in the mouse face area, redisplay that when |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10188 we clear the cursor. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10189 if (w == XWINDOW (dpyinfo->mouse_face_window) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10190 && (vpos > dpyinfo->mouse_face_beg_row |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10191 || (vpos == dpyinfo->mouse_face_beg_row |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10192 && hpos >= dpyinfo->mouse_face_beg_col)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10193 && (vpos < dpyinfo->mouse_face_end_row |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10194 || (vpos == dpyinfo->mouse_face_end_row |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10195 && hpos < dpyinfo->mouse_face_end_col)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10196 /* Don't redraw the cursor's spot in mouse face if it is at the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10197 end of a line (on a newline). The cursor appears there, but |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10198 mouse highlighting does not. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10199 && cursor_row->used[TEXT_AREA] > hpos) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10200 mouse_face_here_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10201 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10202 /* Maybe clear the display under the cursor. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10203 if (w->phys_cursor_type == HOLLOW_BOX_CURSOR) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10204 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10205 int x; |
25546 | 10206 int header_line_height = WINDOW_DISPLAY_HEADER_LINE_HEIGHT (w); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10207 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10208 cursor_glyph = get_phys_cursor_glyph (w); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10209 if (cursor_glyph == NULL) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10210 goto mark_cursor_off; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10211 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10212 x = WINDOW_TEXT_TO_FRAME_PIXEL_X (w, w->phys_cursor.x), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10213 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10214 XClearArea (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10215 x, |
25546 | 10216 WINDOW_TO_FRAME_PIXEL_Y (w, max (header_line_height, |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10217 cursor_row->y)), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10218 cursor_glyph->pixel_width, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10219 cursor_row->visible_height, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10220 False); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10221 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10222 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10223 /* Erase the cursor by redrawing the character underneath it. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10224 if (mouse_face_here_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10225 hl = DRAW_MOUSE_FACE; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10226 else if (cursor_row->inverse_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10227 hl = DRAW_INVERSE_VIDEO; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10228 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10229 hl = DRAW_NORMAL_TEXT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10230 x_draw_phys_cursor_glyph (w, cursor_row, hl); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10231 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10232 mark_cursor_off: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10233 w->phys_cursor_on_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10234 w->phys_cursor_type = NO_CURSOR; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10235 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10236 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10237 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10238 /* Display or clear cursor of window W. If ON is zero, clear the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10239 cursor. If it is non-zero, display the cursor. If ON is nonzero, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10240 where to put the cursor is specified by HPOS, VPOS, X and Y. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10241 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10242 void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10243 x_display_and_set_cursor (w, on, hpos, vpos, x, y) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10244 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10245 int on, hpos, vpos, x, y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10246 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10247 struct frame *f = XFRAME (w->frame); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10248 int new_cursor_type; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10249 struct glyph_matrix *current_glyphs; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10250 struct glyph_row *glyph_row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10251 struct glyph *glyph; |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
10252 |
2235
80e0d36bbb77
* xterm.c (x_display_box_cursor, x_display_bar_cursor): Don't
Jim Blandy <jimb@redhat.com>
parents:
2195
diff
changeset
|
10253 /* This is pointless on invisible frames, and dangerous on garbaged |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10254 windows and frames; in the latter case, the frame or window may |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10255 be in the midst of changing its size, and x and y may be off the |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10256 window. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10257 if (! FRAME_VISIBLE_P (f) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10258 || FRAME_GARBAGED_P (f) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10259 || vpos >= w->current_matrix->nrows |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10260 || hpos >= w->current_matrix->matrix_w) |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
10261 return; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
10262 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
10263 /* If cursor is off and we want it off, return quickly. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10264 if (!on && !w->phys_cursor_on_p) |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
10265 return; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
10266 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10267 current_glyphs = w->current_matrix; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10268 glyph_row = MATRIX_ROW (current_glyphs, vpos); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10269 glyph = glyph_row->glyphs[TEXT_AREA] + hpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10270 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10271 /* If cursor row is not enabled, we don't really know where to |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10272 display the cursor. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10273 if (!glyph_row->enabled_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10274 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10275 w->phys_cursor_on_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10276 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10277 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10278 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10279 xassert (interrupt_input_blocked); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10280 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10281 /* Set new_cursor_type to the cursor we want to be displayed. In a |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10282 mini-buffer window, we want the cursor only to appear if we are |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10283 reading input from this window. For the selected window, we want |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10284 the cursor type given by the frame parameter. If explicitly |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10285 marked off, draw no cursor. In all other cases, we want a hollow |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10286 box cursor. */ |
25191
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10287 if (cursor_in_echo_area |
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10288 && FRAME_HAS_MINIBUF_P (f) |
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10289 && EQ (FRAME_MINIBUF_WINDOW (f), echo_area_window)) |
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10290 { |
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10291 if (w == XWINDOW (echo_area_window)) |
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10292 new_cursor_type = FRAME_DESIRED_CURSOR (f); |
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10293 else |
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10294 new_cursor_type = HOLLOW_BOX_CURSOR; |
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10295 } |
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10296 else |
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10297 { |
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10298 if (w != XWINDOW (selected_window) |
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10299 || f != FRAME_X_DISPLAY_INFO (f)->x_highlight_frame) |
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10300 { |
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10301 if (MINI_WINDOW_P (w)) |
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10302 new_cursor_type = NO_CURSOR; |
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10303 else |
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10304 new_cursor_type = HOLLOW_BOX_CURSOR; |
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10305 } |
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10306 else if (w->cursor_off_p) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10307 new_cursor_type = NO_CURSOR; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10308 else |
25191
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10309 new_cursor_type = FRAME_DESIRED_CURSOR (f); |
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10310 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10311 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10312 /* If cursor is currently being shown and we don't want it to be or |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10313 it is in the wrong place, or the cursor type is not what we want, |
286 | 10314 erase it. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10315 if (w->phys_cursor_on_p |
286 | 10316 && (!on |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10317 || w->phys_cursor.x != x |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10318 || w->phys_cursor.y != y |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10319 || new_cursor_type != w->phys_cursor_type)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10320 x_erase_phys_cursor (w); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10321 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10322 /* If the cursor is now invisible and we want it to be visible, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10323 display it. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10324 if (on && !w->phys_cursor_on_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10325 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10326 w->phys_cursor_ascent = glyph_row->ascent; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10327 w->phys_cursor_height = glyph_row->height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10328 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10329 /* Set phys_cursor_.* before x_draw_.* is called because some |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10330 of them may need the information. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10331 w->phys_cursor.x = x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10332 w->phys_cursor.y = glyph_row->y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10333 w->phys_cursor.hpos = hpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10334 w->phys_cursor.vpos = vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10335 w->phys_cursor_type = new_cursor_type; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10336 w->phys_cursor_on_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10337 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10338 switch (new_cursor_type) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10339 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10340 case HOLLOW_BOX_CURSOR: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10341 x_draw_hollow_cursor (w, glyph_row); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10342 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10343 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10344 case FILLED_BOX_CURSOR: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10345 x_draw_phys_cursor_glyph (w, glyph_row, DRAW_CURSOR); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10346 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10347 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10348 case BAR_CURSOR: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10349 x_draw_bar_cursor (w, glyph_row); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10350 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10351 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10352 case NO_CURSOR: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10353 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10354 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10355 default: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10356 abort (); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10357 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10358 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10359 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10360 #ifndef XFlush |
771 | 10361 if (updating_frame != f) |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
10362 XFlush (FRAME_X_DISPLAY (f)); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10363 #endif |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10364 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10365 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10366 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10367 /* Display the cursor on window W, or clear it. X and Y are window |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10368 relative pixel coordinates. HPOS and VPOS are glyph matrix |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10369 positions. If W is not the selected window, display a hollow |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10370 cursor. ON non-zero means display the cursor at X, Y which |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10371 correspond to HPOS, VPOS, otherwise it is cleared. */ |
15990
1185f8fc0bfb
(do_line_dance, dumprectangle): Use x_update_cursor.
Richard M. Stallman <rms@gnu.org>
parents:
15973
diff
changeset
|
10372 |
21514 | 10373 void |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10374 x_display_cursor (w, on, hpos, vpos, x, y) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10375 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10376 int on, hpos, vpos, x, y; |
286 | 10377 { |
5872
6389c826f847
(x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents:
5825
diff
changeset
|
10378 BLOCK_INPUT; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10379 x_display_and_set_cursor (w, on, hpos, vpos, x, y); |
12431
80a5aedfb4c7
(XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents:
12192
diff
changeset
|
10380 UNBLOCK_INPUT; |
80a5aedfb4c7
(XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents:
12192
diff
changeset
|
10381 } |
80a5aedfb4c7
(XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents:
12192
diff
changeset
|
10382 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10383 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10384 /* Display the cursor on window W, or clear it, according to ON_P. |
12431
80a5aedfb4c7
(XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents:
12192
diff
changeset
|
10385 Don't change the cursor's position. */ |
80a5aedfb4c7
(XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents:
12192
diff
changeset
|
10386 |
21514 | 10387 void |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10388 x_update_cursor (f, on_p) |
12431
80a5aedfb4c7
(XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents:
12192
diff
changeset
|
10389 struct frame *f; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10390 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10391 x_update_cursor_in_window_tree (XWINDOW (f->root_window), on_p); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10392 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10393 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10394 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10395 /* Call x_update_window_cursor with parameter ON_P on all leaf windows |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10396 in the window tree rooted at W. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10397 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10398 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10399 x_update_cursor_in_window_tree (w, on_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10400 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10401 int on_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10402 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10403 while (w) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10404 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10405 if (!NILP (w->hchild)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10406 x_update_cursor_in_window_tree (XWINDOW (w->hchild), on_p); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10407 else if (!NILP (w->vchild)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10408 x_update_cursor_in_window_tree (XWINDOW (w->vchild), on_p); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10409 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10410 x_update_window_cursor (w, on_p); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10411 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10412 w = NILP (w->next) ? 0 : XWINDOW (w->next); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10413 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10414 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10415 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10416 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10417 /* Switch the display of W's cursor on or off, according to the value |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10418 of ON. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10419 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10420 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10421 x_update_window_cursor (w, on) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10422 struct window *w; |
12431
80a5aedfb4c7
(XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents:
12192
diff
changeset
|
10423 int on; |
80a5aedfb4c7
(XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents:
12192
diff
changeset
|
10424 { |
80a5aedfb4c7
(XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents:
12192
diff
changeset
|
10425 BLOCK_INPUT; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10426 x_display_and_set_cursor (w, on, w->phys_cursor.hpos, w->phys_cursor.vpos, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10427 w->phys_cursor.x, w->phys_cursor.y); |
5872
6389c826f847
(x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents:
5825
diff
changeset
|
10428 UNBLOCK_INPUT; |
286 | 10429 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10430 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10431 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10432 |
286 | 10433 |
10434 /* Icons. */ | |
10435 | |
771 | 10436 /* Refresh bitmap kitchen sink icon for frame F |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10437 when we get an expose event for it. */ |
286 | 10438 |
21514 | 10439 void |
771 | 10440 refreshicon (f) |
10441 struct frame *f; | |
286 | 10442 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10443 /* Normally, the window manager handles this function. */ |
286 | 10444 } |
10445 | |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
10446 /* Make the x-window of frame F use the gnu icon bitmap. */ |
286 | 10447 |
10448 int | |
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
10449 x_bitmap_icon (f, file) |
771 | 10450 struct frame *f; |
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
10451 Lisp_Object file; |
286 | 10452 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10453 int bitmap_id; |
286 | 10454 |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
10455 if (FRAME_X_WINDOW (f) == 0) |
286 | 10456 return 1; |
10457 | |
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
10458 /* Free up our existing icon bitmap if any. */ |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
10459 if (f->output_data.x->icon_bitmap > 0) |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
10460 x_destroy_bitmap (f, f->output_data.x->icon_bitmap); |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
10461 f->output_data.x->icon_bitmap = 0; |
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
10462 |
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
10463 if (STRINGP (file)) |
9542
f8b7a65a94bc
(x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents:
9537
diff
changeset
|
10464 bitmap_id = x_create_bitmap_from_file (f, file); |
f8b7a65a94bc
(x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents:
9537
diff
changeset
|
10465 else |
f8b7a65a94bc
(x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents:
9537
diff
changeset
|
10466 { |
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
10467 /* Create the GNU bitmap if necessary. */ |
10755
e5f13cc95d02
(x_bitmap_icon): Fix test for unallocated icon bitmap.
Paul Reilly <pmr@pajato.com>
parents:
10743
diff
changeset
|
10468 if (FRAME_X_DISPLAY_INFO (f)->icon_bitmap_id < 0) |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
10469 FRAME_X_DISPLAY_INFO (f)->icon_bitmap_id |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
10470 = x_create_bitmap_from_data (f, gnu_bits, |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
10471 gnu_width, gnu_height); |
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
10472 |
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
10473 /* The first time we create the GNU bitmap, |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10474 this increments the ref-count one extra time. |
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
10475 As a result, the GNU bitmap is never freed. |
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
10476 That way, we don't have to worry about allocating it again. */ |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
10477 x_reference_bitmap (f, FRAME_X_DISPLAY_INFO (f)->icon_bitmap_id); |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
10478 |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
10479 bitmap_id = FRAME_X_DISPLAY_INFO (f)->icon_bitmap_id; |
9542
f8b7a65a94bc
(x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents:
9537
diff
changeset
|
10480 } |
f8b7a65a94bc
(x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents:
9537
diff
changeset
|
10481 |
f8b7a65a94bc
(x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents:
9537
diff
changeset
|
10482 x_wm_set_icon_pixmap (f, bitmap_id); |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
10483 f->output_data.x->icon_bitmap = bitmap_id; |
286 | 10484 |
10485 return 0; | |
10486 } | |
10487 | |
10488 | |
12074
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10489 /* Make the x-window of frame F use a rectangle with text. |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10490 Use ICON_NAME as the text. */ |
286 | 10491 |
10492 int | |
771 | 10493 x_text_icon (f, icon_name) |
10494 struct frame *f; | |
286 | 10495 char *icon_name; |
10496 { | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
10497 if (FRAME_X_WINDOW (f) == 0) |
286 | 10498 return 1; |
10499 | |
12074
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10500 #ifdef HAVE_X11R4 |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10501 { |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10502 XTextProperty text; |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10503 text.value = (unsigned char *) icon_name; |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10504 text.encoding = XA_STRING; |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10505 text.format = 8; |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10506 text.nitems = strlen (icon_name); |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10507 #ifdef USE_X_TOOLKIT |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
10508 XSetWMIconName (FRAME_X_DISPLAY (f), XtWindow (f->output_data.x->widget), |
12074
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10509 &text); |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10510 #else /* not USE_X_TOOLKIT */ |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10511 XSetWMIconName (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), &text); |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10512 #endif /* not USE_X_TOOLKIT */ |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10513 } |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10514 #else /* not HAVE_X11R4 */ |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10515 XSetIconName (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), icon_name); |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10516 #endif /* not HAVE_X11R4 */ |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
10517 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
10518 if (f->output_data.x->icon_bitmap > 0) |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
10519 x_destroy_bitmap (f, f->output_data.x->icon_bitmap); |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
10520 f->output_data.x->icon_bitmap = 0; |
976
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
10521 x_wm_set_icon_pixmap (f, 0); |
286 | 10522 |
10523 return 0; | |
10524 } | |
10525 | |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10526 #define X_ERROR_MESSAGE_SIZE 200 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10527 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10528 /* If non-nil, this should be a string. |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10529 It means catch X errors and store the error message in this string. */ |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10530 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10531 static Lisp_Object x_error_message_string; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10532 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10533 /* An X error handler which stores the error message in |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10534 x_error_message_string. This is called from x_error_handler if |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10535 x_catch_errors is in effect. */ |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10536 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10537 static void |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10538 x_error_catcher (display, error) |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10539 Display *display; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10540 XErrorEvent *error; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10541 { |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10542 XGetErrorText (display, error->error_code, |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10543 XSTRING (x_error_message_string)->data, |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10544 X_ERROR_MESSAGE_SIZE); |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10545 } |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10546 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10547 /* Begin trapping X errors for display DPY. Actually we trap X errors |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10548 for all displays, but DPY should be the display you are actually |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10549 operating on. |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10550 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10551 After calling this function, X protocol errors no longer cause |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10552 Emacs to exit; instead, they are recorded in the string |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10553 stored in x_error_message_string. |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10554 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10555 Calling x_check_errors signals an Emacs error if an X error has |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10556 occurred since the last call to x_catch_errors or x_check_errors. |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10557 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10558 Calling x_uncatch_errors resumes the normal error handling. */ |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10559 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10560 void x_check_errors (); |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10561 static Lisp_Object x_catch_errors_unwind (); |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10562 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10563 int |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10564 x_catch_errors (dpy) |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10565 Display *dpy; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10566 { |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10567 int count = specpdl_ptr - specpdl; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10568 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10569 /* Make sure any errors from previous requests have been dealt with. */ |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10570 XSync (dpy, False); |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10571 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10572 record_unwind_protect (x_catch_errors_unwind, x_error_message_string); |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10573 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10574 x_error_message_string = make_uninit_string (X_ERROR_MESSAGE_SIZE); |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10575 XSTRING (x_error_message_string)->data[0] = 0; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10576 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10577 return count; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10578 } |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10579 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10580 /* Unbind the binding that we made to check for X errors. */ |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10581 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10582 static Lisp_Object |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10583 x_catch_errors_unwind (old_val) |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10584 Lisp_Object old_val; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10585 { |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10586 x_error_message_string = old_val; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10587 return Qnil; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10588 } |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10589 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10590 /* If any X protocol errors have arrived since the last call to |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10591 x_catch_errors or x_check_errors, signal an Emacs error using |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10592 sprintf (a buffer, FORMAT, the x error message text) as the text. */ |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10593 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10594 void |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10595 x_check_errors (dpy, format) |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10596 Display *dpy; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10597 char *format; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10598 { |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10599 /* Make sure to catch any errors incurred so far. */ |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10600 XSync (dpy, False); |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10601 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10602 if (XSTRING (x_error_message_string)->data[0]) |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10603 error (format, XSTRING (x_error_message_string)->data); |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10604 } |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10605 |
17953
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10606 /* Nonzero if we had any X protocol errors |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10607 since we did x_catch_errors on DPY. */ |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10608 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10609 int |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10610 x_had_errors_p (dpy) |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10611 Display *dpy; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10612 { |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10613 /* Make sure to catch any errors incurred so far. */ |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10614 XSync (dpy, False); |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10615 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10616 return XSTRING (x_error_message_string)->data[0] != 0; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10617 } |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10618 |
17953
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10619 /* Forget about any errors we have had, since we did x_catch_errors on DPY. */ |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10620 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10621 void |
17953
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10622 x_clear_errors (dpy) |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10623 Display *dpy; |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10624 { |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10625 XSTRING (x_error_message_string)->data[0] = 0; |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10626 } |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10627 |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10628 /* Stop catching X protocol errors and let them make Emacs die. |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10629 DPY should be the display that was passed to x_catch_errors. |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10630 COUNT should be the value that was returned by |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10631 the corresponding call to x_catch_errors. */ |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10632 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10633 void |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10634 x_uncatch_errors (dpy, count) |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10635 Display *dpy; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10636 int count; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10637 { |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10638 unbind_to (count, Qnil); |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10639 } |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10640 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10641 #if 0 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10642 static unsigned int x_wire_count; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10643 x_trace_wire () |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10644 { |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10645 fprintf (stderr, "Lib call: %d\n", ++x_wire_count); |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10646 } |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10647 #endif /* ! 0 */ |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10648 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10649 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10650 /* Handle SIGPIPE, which can happen when the connection to a server |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10651 simply goes away. SIGPIPE is handled by x_connection_signal. |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10652 Don't need to do anything, because the write which caused the |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10653 SIGPIPE will fail, causing Xlib to invoke the X IO error handler, |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10654 which will do the appropriate cleanup for us. */ |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10655 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10656 static SIGTYPE |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10657 x_connection_signal (signalnum) /* If we don't have an argument, */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10658 int signalnum; /* some compilers complain in signal calls. */ |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10659 { |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10660 #ifdef USG |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10661 /* USG systems forget handlers when they are used; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10662 must reestablish each time */ |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10663 signal (signalnum, x_connection_signal); |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10664 #endif /* USG */ |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10665 } |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10666 |
621 | 10667 /* Handling X errors. */ |
10668 | |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10669 /* Handle the loss of connection to display DISPLAY. */ |
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
10670 |
621 | 10671 static SIGTYPE |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10672 x_connection_closed (display, error_message) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10673 Display *display; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10674 char *error_message; |
621 | 10675 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10676 struct x_display_info *dpyinfo = x_display_info_for_display (display); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10677 Lisp_Object frame, tail; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10678 |
14489
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
10679 /* Indicate that this display is dead. */ |
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
10680 |
17825
281d99590839
(dumpglyphs): Draw glyphs one by one if the font for
Kenichi Handa <handa@m17n.org>
parents:
17720
diff
changeset
|
10681 #ifdef USE_X_TOOLKIT |
16179
7f8ce4d3e955
(x_connection_closed): Call XtCloseDisplay.
Richard M. Stallman <rms@gnu.org>
parents:
16104
diff
changeset
|
10682 XtCloseDisplay (display); |
17825
281d99590839
(dumpglyphs): Draw glyphs one by one if the font for
Kenichi Handa <handa@m17n.org>
parents:
17720
diff
changeset
|
10683 #endif |
16179
7f8ce4d3e955
(x_connection_closed): Call XtCloseDisplay.
Richard M. Stallman <rms@gnu.org>
parents:
16104
diff
changeset
|
10684 |
14489
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
10685 dpyinfo->display = 0; |
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
10686 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10687 /* First delete frames whose mini-buffers are on frames |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10688 that are on the dead display. */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10689 FOR_EACH_FRAME (tail, frame) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10690 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10691 Lisp_Object minibuf_frame; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10692 minibuf_frame |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10693 = WINDOW_FRAME (XWINDOW (FRAME_MINIBUF_WINDOW (XFRAME (frame)))); |
10921
bf33c9179a6b
(x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents:
10755
diff
changeset
|
10694 if (FRAME_X_P (XFRAME (frame)) |
bf33c9179a6b
(x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents:
10755
diff
changeset
|
10695 && FRAME_X_P (XFRAME (minibuf_frame)) |
bf33c9179a6b
(x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents:
10755
diff
changeset
|
10696 && ! EQ (frame, minibuf_frame) |
bf33c9179a6b
(x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents:
10755
diff
changeset
|
10697 && FRAME_X_DISPLAY_INFO (XFRAME (minibuf_frame)) == dpyinfo) |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10698 Fdelete_frame (frame, Qt); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10699 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10700 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10701 /* Now delete all remaining frames on the dead display. |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10702 We are now sure none of these is used as the mini-buffer |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10703 for another frame that we need to delete. */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10704 FOR_EACH_FRAME (tail, frame) |
10921
bf33c9179a6b
(x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents:
10755
diff
changeset
|
10705 if (FRAME_X_P (XFRAME (frame)) |
bf33c9179a6b
(x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents:
10755
diff
changeset
|
10706 && FRAME_X_DISPLAY_INFO (XFRAME (frame)) == dpyinfo) |
11904
0d37c1e81c0d
(x_connection_closed): Unblock input, first thing.
Karl Heuer <kwzh@gnu.org>
parents:
11901
diff
changeset
|
10707 { |
0d37c1e81c0d
(x_connection_closed): Unblock input, first thing.
Karl Heuer <kwzh@gnu.org>
parents:
11901
diff
changeset
|
10708 /* Set this to t so that Fdelete_frame won't get confused |
0d37c1e81c0d
(x_connection_closed): Unblock input, first thing.
Karl Heuer <kwzh@gnu.org>
parents:
11901
diff
changeset
|
10709 trying to find a replacement. */ |
0d37c1e81c0d
(x_connection_closed): Unblock input, first thing.
Karl Heuer <kwzh@gnu.org>
parents:
11901
diff
changeset
|
10710 FRAME_KBOARD (XFRAME (frame))->Vdefault_minibuffer_frame = Qt; |
0d37c1e81c0d
(x_connection_closed): Unblock input, first thing.
Karl Heuer <kwzh@gnu.org>
parents:
11901
diff
changeset
|
10711 Fdelete_frame (frame, Qt); |
0d37c1e81c0d
(x_connection_closed): Unblock input, first thing.
Karl Heuer <kwzh@gnu.org>
parents:
11901
diff
changeset
|
10712 } |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10713 |
13727
9eb09adbcb38
(x_connection_closed): Don't delete dpyinfo if it's null.
Karl Heuer <kwzh@gnu.org>
parents:
13633
diff
changeset
|
10714 if (dpyinfo) |
9eb09adbcb38
(x_connection_closed): Don't delete dpyinfo if it's null.
Karl Heuer <kwzh@gnu.org>
parents:
13633
diff
changeset
|
10715 x_delete_display (dpyinfo); |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10716 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10717 if (x_display_list == 0) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10718 { |
15515
69257ac25af4
(x_connection_closed): Add newline when printing error message on stderr.
Richard M. Stallman <rms@gnu.org>
parents:
15514
diff
changeset
|
10719 fprintf (stderr, "%s\n", error_message); |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10720 shut_down_emacs (0, 0, Qnil); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10721 exit (70); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10722 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10723 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10724 /* Ordinary stack unwind doesn't deal with these. */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10725 #ifdef SIGIO |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10726 sigunblock (sigmask (SIGIO)); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10727 #endif |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10728 sigunblock (sigmask (SIGALRM)); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10729 TOTALLY_UNBLOCK_INPUT; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10730 |
15526
926ef4afc174
(x_connection_closed): Call clear_waiting_for_input.
Richard M. Stallman <rms@gnu.org>
parents:
15521
diff
changeset
|
10731 clear_waiting_for_input (); |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10732 error ("%s", error_message); |
621 | 10733 } |
10734 | |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10735 /* This is the usual handler for X protocol errors. |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10736 It kills all frames on the display that we got the error for. |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10737 If that was the only one, it prints an error message and kills Emacs. */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10738 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10739 static void |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
10740 x_error_quitter (display, error) |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
10741 Display *display; |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
10742 XErrorEvent *error; |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
10743 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10744 char buf[256], buf1[356]; |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
10745 |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
10746 /* Note that there is no real way portable across R3/R4 to get the |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
10747 original error handler. */ |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
10748 |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
10749 XGetErrorText (display, error->error_code, buf, sizeof (buf)); |
15521
2b61a33a4576
(x_error_quitter): Delete newline from sprintf string.
Richard M. Stallman <rms@gnu.org>
parents:
15519
diff
changeset
|
10750 sprintf (buf1, "X protocol error: %s on protocol request %d", |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
10751 buf, error->request_code); |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10752 x_connection_closed (display, buf1); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
10753 } |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
10754 |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10755 /* This is the first-level handler for X protocol errors. |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10756 It calls x_error_quitter or x_error_catcher. */ |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10757 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10758 static int |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10759 x_error_handler (display, error) |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10760 Display *display; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10761 XErrorEvent *error; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10762 { |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10763 if (! NILP (x_error_message_string)) |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10764 x_error_catcher (display, error); |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10765 else |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10766 x_error_quitter (display, error); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10767 return 0; |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10768 } |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10769 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10770 /* This is the handler for X IO errors, always. |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10771 It kills all frames on the display that we lost touch with. |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10772 If that was the only one, it prints an error message and kills Emacs. */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10773 |
1875
f569bc4e9b8f
* xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents:
1841
diff
changeset
|
10774 static int |
f569bc4e9b8f
* xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents:
1841
diff
changeset
|
10775 x_io_error_quitter (display) |
f569bc4e9b8f
* xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents:
1841
diff
changeset
|
10776 Display *display; |
f569bc4e9b8f
* xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents:
1841
diff
changeset
|
10777 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10778 char buf[256]; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10779 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10780 sprintf (buf, "Connection lost to X server `%s'", DisplayString (display)); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10781 x_connection_closed (display, buf); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10782 return 0; |
1875
f569bc4e9b8f
* xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents:
1841
diff
changeset
|
10783 } |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10784 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
10785 /* Changing the font of the frame. */ |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
10786 |
8291
9c6ddd14996b
(struct font_info): New field full_name.
Richard M. Stallman <rms@gnu.org>
parents:
8279
diff
changeset
|
10787 /* Give frame F the font named FONTNAME as its default font, and |
9c6ddd14996b
(struct font_info): New field full_name.
Richard M. Stallman <rms@gnu.org>
parents:
8279
diff
changeset
|
10788 return the full name of that font. FONTNAME may be a wildcard |
9c6ddd14996b
(struct font_info): New field full_name.
Richard M. Stallman <rms@gnu.org>
parents:
8279
diff
changeset
|
10789 pattern; in that case, we choose some font that fits the pattern. |
9c6ddd14996b
(struct font_info): New field full_name.
Richard M. Stallman <rms@gnu.org>
parents:
8279
diff
changeset
|
10790 The return value shows which font we chose. */ |
9c6ddd14996b
(struct font_info): New field full_name.
Richard M. Stallman <rms@gnu.org>
parents:
8279
diff
changeset
|
10791 |
3076
e3b3c67cf203
Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents:
3066
diff
changeset
|
10792 Lisp_Object |
771 | 10793 x_new_font (f, fontname) |
10794 struct frame *f; | |
286 | 10795 register char *fontname; |
10796 { | |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10797 struct font_info *fontp |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10798 = fs_load_font (f, FRAME_X_FONT_TABLE (f), CHARSET_ASCII, fontname, -1); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10799 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10800 if (!fontp) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10801 return Qnil; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10802 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10803 f->output_data.x->font = (XFontStruct *) (fontp->font); |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
10804 f->output_data.x->baseline_offset = fontp->baseline_offset; |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10805 f->output_data.x->fontset = -1; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10806 |
9167
8ad448b29c1c
(x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents:
9101
diff
changeset
|
10807 /* Compute the scroll bar width in character columns. */ |
8ad448b29c1c
(x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents:
9101
diff
changeset
|
10808 if (f->scroll_bar_pixel_width > 0) |
8ad448b29c1c
(x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents:
9101
diff
changeset
|
10809 { |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
10810 int wid = FONT_WIDTH (f->output_data.x->font); |
9167
8ad448b29c1c
(x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents:
9101
diff
changeset
|
10811 f->scroll_bar_cols = (f->scroll_bar_pixel_width + wid-1) / wid; |
8ad448b29c1c
(x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents:
9101
diff
changeset
|
10812 } |
8ad448b29c1c
(x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents:
9101
diff
changeset
|
10813 else |
19027
1171ca6f0281
(x_new_font): Follow the change in x_set_scroll_bar_width and make the
Richard M. Stallman <rms@gnu.org>
parents:
19021
diff
changeset
|
10814 { |
1171ca6f0281
(x_new_font): Follow the change in x_set_scroll_bar_width and make the
Richard M. Stallman <rms@gnu.org>
parents:
19021
diff
changeset
|
10815 int wid = FONT_WIDTH (f->output_data.x->font); |
1171ca6f0281
(x_new_font): Follow the change in x_set_scroll_bar_width and make the
Richard M. Stallman <rms@gnu.org>
parents:
19021
diff
changeset
|
10816 f->scroll_bar_cols = (14 + wid - 1) / wid; |
1171ca6f0281
(x_new_font): Follow the change in x_set_scroll_bar_width and make the
Richard M. Stallman <rms@gnu.org>
parents:
19021
diff
changeset
|
10817 } |
9167
8ad448b29c1c
(x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents:
9101
diff
changeset
|
10818 |
771 | 10819 /* Now make the frame display the given font. */ |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
10820 if (FRAME_X_WINDOW (f) != 0) |
286 | 10821 { |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
10822 XSetFont (FRAME_X_DISPLAY (f), f->output_data.x->normal_gc, |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
10823 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:
12657
diff
changeset
|
10824 XSetFont (FRAME_X_DISPLAY (f), f->output_data.x->reverse_gc, |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
10825 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:
12657
diff
changeset
|
10826 XSetFont (FRAME_X_DISPLAY (f), f->output_data.x->cursor_gc, |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
10827 f->output_data.x->font->fid); |
771 | 10828 |
6767
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
10829 frame_update_line_height (f); |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
10830 x_set_window_size (f, 0, f->width, f->height); |
286 | 10831 } |
6767
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
10832 else |
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
10833 /* If we are setting a new frame's font for the first time, |
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
10834 there are no faces yet, so this font's height is the line height. */ |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
10835 f->output_data.x->line_height = FONT_HEIGHT (f->output_data.x->font); |
286 | 10836 |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10837 return build_string (fontp->full_name); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10838 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10839 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10840 /* Give frame F the fontset named FONTSETNAME as its default font, and |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10841 return the full name of that fontset. FONTSETNAME may be a wildcard |
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
10842 pattern; in that case, we choose some fontset that fits the pattern. |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
10843 The return value shows which fontset we chose. */ |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10844 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10845 Lisp_Object |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10846 x_new_fontset (f, fontsetname) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10847 struct frame *f; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10848 char *fontsetname; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10849 { |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10850 int fontset = fs_query_fontset (f, fontsetname); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10851 struct fontset_info *fontsetp; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10852 Lisp_Object result; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10853 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10854 if (fontset < 0) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10855 return Qnil; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10856 |
18347
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
10857 if (f->output_data.x->fontset == fontset) |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
10858 /* This fontset is already set in frame F. There's nothing more |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
10859 to do. */ |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
10860 return build_string (fontsetname); |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
10861 |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10862 fontsetp = FRAME_FONTSET_DATA (f)->fontset_table[fontset]; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10863 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10864 if (!fontsetp->fontname[CHARSET_ASCII]) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10865 /* This fontset doesn't contain ASCII font. */ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10866 return Qnil; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10867 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10868 result = x_new_font (f, fontsetp->fontname[CHARSET_ASCII]); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10869 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10870 if (!STRINGP (result)) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10871 /* Can't load ASCII font. */ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10872 return Qnil; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10873 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10874 /* Since x_new_font doesn't update any fontset information, do it now. */ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10875 f->output_data.x->fontset = fontset; |
18347
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
10876 FS_LOAD_FONT (f, FRAME_X_FONT_TABLE (f), |
24223
c7888c86b9e1
(x_new_fontset): For ASCII font, don't use the font name
Kenichi Handa <handa@m17n.org>
parents:
24164
diff
changeset
|
10877 CHARSET_ASCII, fontsetp->fontname[CHARSET_ASCII], fontset); |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10878 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10879 return build_string (fontsetname); |
286 | 10880 } |
10881 | |
14826
eec0abb31126
Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents:
14801
diff
changeset
|
10882 /* Calculate the absolute position in frame F |
eec0abb31126
Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents:
14801
diff
changeset
|
10883 from its current recorded position values and gravity. */ |
eec0abb31126
Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents:
14801
diff
changeset
|
10884 |
21514 | 10885 void |
7264
a701bffa0f9d
(x_calc_absolute_position): Use size_hint_flags.
Richard M. Stallman <rms@gnu.org>
parents:
7262
diff
changeset
|
10886 x_calc_absolute_position (f) |
771 | 10887 struct frame *f; |
286 | 10888 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10889 Window child; |
4630
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
10890 int win_x = 0, win_y = 0; |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
10891 int flags = f->output_data.x->size_hint_flags; |
11896
507a45c7e911
(x_calc_absolute_position): Use menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11807
diff
changeset
|
10892 int this_window; |
507a45c7e911
(x_calc_absolute_position): Use menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11807
diff
changeset
|
10893 |
17953
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10894 /* We have nothing to do if the current position |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10895 is already for the top-left corner. */ |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10896 if (! ((flags & XNegative) || (flags & YNegative))) |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10897 return; |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10898 |
11896
507a45c7e911
(x_calc_absolute_position): Use menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11807
diff
changeset
|
10899 #ifdef USE_X_TOOLKIT |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
10900 this_window = XtWindow (f->output_data.x->widget); |
11896
507a45c7e911
(x_calc_absolute_position): Use menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11807
diff
changeset
|
10901 #else |
507a45c7e911
(x_calc_absolute_position): Use menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11807
diff
changeset
|
10902 this_window = FRAME_X_WINDOW (f); |
507a45c7e911
(x_calc_absolute_position): Use menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11807
diff
changeset
|
10903 #endif |
4630
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
10904 |
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
10905 /* Find the position of the outside upper-left corner of |
17953
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10906 the inner window, with respect to the outer window. |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10907 But do this only if we will need the results. */ |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
10908 if (f->output_data.x->parent_desc != FRAME_X_DISPLAY_INFO (f)->root_window) |
4630
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
10909 { |
17953
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10910 int count; |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10911 |
4630
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
10912 BLOCK_INPUT; |
17953
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10913 count = x_catch_errors (FRAME_X_DISPLAY (f)); |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10914 while (1) |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10915 { |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10916 x_clear_errors (FRAME_X_DISPLAY (f)); |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10917 XTranslateCoordinates (FRAME_X_DISPLAY (f), |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10918 |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10919 /* From-window, to-window. */ |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10920 this_window, |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10921 f->output_data.x->parent_desc, |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10922 |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10923 /* From-position, to-position. */ |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10924 0, 0, &win_x, &win_y, |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10925 |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10926 /* Child of win. */ |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10927 &child); |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10928 if (x_had_errors_p (FRAME_X_DISPLAY (f))) |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10929 { |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10930 Window newroot, newparent = 0xdeadbeef; |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10931 Window *newchildren; |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10932 int nchildren; |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10933 |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10934 if (! XQueryTree (FRAME_X_DISPLAY (f), this_window, &newroot, |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10935 &newparent, &newchildren, &nchildren)) |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10936 break; |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10937 |
23107
44eda932afcf
(x_calc_absolute_position): Cast argument to XFree, in
Karl Heuer <kwzh@gnu.org>
parents:
23095
diff
changeset
|
10938 XFree ((char *) newchildren); |
17953
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10939 |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10940 f->output_data.x->parent_desc = newparent; |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10941 } |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10942 else |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10943 break; |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10944 } |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10945 |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10946 x_uncatch_errors (FRAME_X_DISPLAY (f), count); |
4630
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
10947 UNBLOCK_INPUT; |
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
10948 } |
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
10949 |
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
10950 /* Treat negative positions as relative to the leftmost bottommost |
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
10951 position that fits on the screen. */ |
7262
68fc80bf10df
(x_wm_set_size_hint): Don't try to handle negative positions.
Richard M. Stallman <rms@gnu.org>
parents:
7210
diff
changeset
|
10952 if (flags & XNegative) |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
10953 f->output_data.x->left_pos = (FRAME_X_DISPLAY_INFO (f)->width |
14826
eec0abb31126
Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents:
14801
diff
changeset
|
10954 - 2 * f->output_data.x->border_width - win_x |
eec0abb31126
Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents:
14801
diff
changeset
|
10955 - PIXEL_WIDTH (f) |
eec0abb31126
Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents:
14801
diff
changeset
|
10956 + f->output_data.x->left_pos); |
771 | 10957 |
7262
68fc80bf10df
(x_wm_set_size_hint): Don't try to handle negative positions.
Richard M. Stallman <rms@gnu.org>
parents:
7210
diff
changeset
|
10958 if (flags & YNegative) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10959 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10960 int menubar_height = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10961 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10962 #ifdef USE_X_TOOLKIT |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10963 if (f->output_data.x->menubar_widget) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10964 menubar_height |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10965 = (f->output_data.x->menubar_widget->core.height |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10966 + f->output_data.x->menubar_widget->core.border_width); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10967 #endif |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10968 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10969 f->output_data.x->top_pos = (FRAME_X_DISPLAY_INFO (f)->height |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10970 - 2 * f->output_data.x->border_width |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10971 - win_y |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10972 - PIXEL_HEIGHT (f) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10973 - menubar_height |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10974 + f->output_data.x->top_pos); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10975 } |
14826
eec0abb31126
Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents:
14801
diff
changeset
|
10976 |
7409
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
10977 /* The left_pos and top_pos |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
10978 are now relative to the top and left screen edges, |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
10979 so the flags should correspond. */ |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
10980 f->output_data.x->size_hint_flags &= ~ (XNegative | YNegative); |
286 | 10981 } |
10982 | |
7409
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
10983 /* CHANGE_GRAVITY is 1 when calling from Fset_frame_position, |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
10984 to really change the position, and 0 when calling from |
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
10985 x_make_frame_visible (in that case, XOFF and YOFF are the current |
11988
a1ce6f699967
(x_set_offset): Distinguish CHANGE_GRAVITY < 0 case.
Karl Heuer <kwzh@gnu.org>
parents:
11953
diff
changeset
|
10986 position values). It is -1 when calling from x_set_frame_parameters, |
a1ce6f699967
(x_set_offset): Distinguish CHANGE_GRAVITY < 0 case.
Karl Heuer <kwzh@gnu.org>
parents:
11953
diff
changeset
|
10987 which means, do adjust for borders but don't change the gravity. */ |
7409
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
10988 |
21514 | 10989 void |
6934
e0ab4f59004e
(dumpglyphs): When HL=2, check explicitly for using
Richard M. Stallman <rms@gnu.org>
parents:
6883
diff
changeset
|
10990 x_set_offset (f, xoff, yoff, change_gravity) |
771 | 10991 struct frame *f; |
286 | 10992 register int xoff, yoff; |
6934
e0ab4f59004e
(dumpglyphs): When HL=2, check explicitly for using
Richard M. Stallman <rms@gnu.org>
parents:
6883
diff
changeset
|
10993 int change_gravity; |
286 | 10994 { |
11901
8ecc60a02138
(x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents:
11896
diff
changeset
|
10995 int modified_top, modified_left; |
8ecc60a02138
(x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents:
11896
diff
changeset
|
10996 |
11988
a1ce6f699967
(x_set_offset): Distinguish CHANGE_GRAVITY < 0 case.
Karl Heuer <kwzh@gnu.org>
parents:
11953
diff
changeset
|
10997 if (change_gravity > 0) |
7409
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
10998 { |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
10999 f->output_data.x->top_pos = yoff; |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11000 f->output_data.x->left_pos = xoff; |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11001 f->output_data.x->size_hint_flags &= ~ (XNegative | YNegative); |
7409
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
11002 if (xoff < 0) |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11003 f->output_data.x->size_hint_flags |= XNegative; |
7409
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
11004 if (yoff < 0) |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11005 f->output_data.x->size_hint_flags |= YNegative; |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11006 f->output_data.x->win_gravity = NorthWestGravity; |
7409
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
11007 } |
7264
a701bffa0f9d
(x_calc_absolute_position): Use size_hint_flags.
Richard M. Stallman <rms@gnu.org>
parents:
7262
diff
changeset
|
11008 x_calc_absolute_position (f); |
286 | 11009 |
11010 BLOCK_INPUT; | |
11915
e2ab839155e1
(XTflash): Use pointers as args to select.
Karl Heuer <kwzh@gnu.org>
parents:
11904
diff
changeset
|
11011 x_wm_set_size_hint (f, (long) 0, 0); |
7409
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
11012 |
17519
5aa7011aa3d5
(x_set_offset): Turn off the code that added the border_width
Richard M. Stallman <rms@gnu.org>
parents:
17371
diff
changeset
|
11013 modified_left = f->output_data.x->left_pos; |
5aa7011aa3d5
(x_set_offset): Turn off the code that added the border_width
Richard M. Stallman <rms@gnu.org>
parents:
17371
diff
changeset
|
11014 modified_top = f->output_data.x->top_pos; |
5aa7011aa3d5
(x_set_offset): Turn off the code that added the border_width
Richard M. Stallman <rms@gnu.org>
parents:
17371
diff
changeset
|
11015 #if 0 /* Running on psilocin (Debian), and displaying on the NCD X-terminal, |
5aa7011aa3d5
(x_set_offset): Turn off the code that added the border_width
Richard M. Stallman <rms@gnu.org>
parents:
17371
diff
changeset
|
11016 this seems to be unnecessary and incorrect. rms, 4/17/97. */ |
11901
8ecc60a02138
(x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents:
11896
diff
changeset
|
11017 /* It is a mystery why we need to add the border_width here |
8ecc60a02138
(x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents:
11896
diff
changeset
|
11018 when the frame is already visible, but experiment says we do. */ |
11988
a1ce6f699967
(x_set_offset): Distinguish CHANGE_GRAVITY < 0 case.
Karl Heuer <kwzh@gnu.org>
parents:
11953
diff
changeset
|
11019 if (change_gravity != 0) |
11901
8ecc60a02138
(x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents:
11896
diff
changeset
|
11020 { |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11021 modified_left += f->output_data.x->border_width; |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11022 modified_top += f->output_data.x->border_width; |
11901
8ecc60a02138
(x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents:
11896
diff
changeset
|
11023 } |
17519
5aa7011aa3d5
(x_set_offset): Turn off the code that added the border_width
Richard M. Stallman <rms@gnu.org>
parents:
17371
diff
changeset
|
11024 #endif |
11901
8ecc60a02138
(x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents:
11896
diff
changeset
|
11025 |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11026 #ifdef USE_X_TOOLKIT |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11027 XMoveWindow (FRAME_X_DISPLAY (f), XtWindow (f->output_data.x->widget), |
11901
8ecc60a02138
(x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents:
11896
diff
changeset
|
11028 modified_left, modified_top); |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11029 #else /* not USE_X_TOOLKIT */ |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11030 XMoveWindow (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
11901
8ecc60a02138
(x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents:
11896
diff
changeset
|
11031 modified_left, modified_top); |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11032 #endif /* not USE_X_TOOLKIT */ |
286 | 11033 UNBLOCK_INPUT; |
11034 } | |
11035 | |
5825
b1f35db748d8
(x_make_frame_invisible): Add USE_X_TOOLKIT conditional.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5753
diff
changeset
|
11036 /* Call this to change the size of frame F's x-window. |
b1f35db748d8
(x_make_frame_invisible): Add USE_X_TOOLKIT conditional.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5753
diff
changeset
|
11037 If CHANGE_GRAVITY is 1, we change to top-left-corner window gravity |
b1f35db748d8
(x_make_frame_invisible): Add USE_X_TOOLKIT conditional.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5753
diff
changeset
|
11038 for this size change and subsequent size changes. |
b1f35db748d8
(x_make_frame_invisible): Add USE_X_TOOLKIT conditional.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5753
diff
changeset
|
11039 Otherwise we leave the window gravity unchanged. */ |
b1f35db748d8
(x_make_frame_invisible): Add USE_X_TOOLKIT conditional.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5753
diff
changeset
|
11040 |
21514 | 11041 void |
5825
b1f35db748d8
(x_make_frame_invisible): Add USE_X_TOOLKIT conditional.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5753
diff
changeset
|
11042 x_set_window_size (f, change_gravity, cols, rows) |
771 | 11043 struct frame *f; |
5825
b1f35db748d8
(x_make_frame_invisible): Add USE_X_TOOLKIT conditional.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5753
diff
changeset
|
11044 int change_gravity; |
976
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
11045 int cols, rows; |
286 | 11046 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11047 #ifndef USE_X_TOOLKIT |
286 | 11048 int pixelwidth, pixelheight; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11049 #endif |
14692
e93656946a8c
(x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents:
14557
diff
changeset
|
11050 |
e93656946a8c
(x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents:
14557
diff
changeset
|
11051 BLOCK_INPUT; |
286 | 11052 |
5686
0c351de98a26
(x_set_window_size): Add USE_X_TOOLKIT conditional. Call EmacsFrameSetCharSize and return.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5685
diff
changeset
|
11053 #ifdef USE_X_TOOLKIT |
7415
fbea5637a4b4
(x_set_window_size) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents:
7409
diff
changeset
|
11054 { |
fbea5637a4b4
(x_set_window_size) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents:
7409
diff
changeset
|
11055 /* The x and y position of the widget is clobbered by the |
fbea5637a4b4
(x_set_window_size) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents:
7409
diff
changeset
|
11056 call to XtSetValues within EmacsFrameSetCharSize. |
fbea5637a4b4
(x_set_window_size) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents:
7409
diff
changeset
|
11057 This is a real kludge, but I don't understand Xt so I can't |
fbea5637a4b4
(x_set_window_size) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents:
7409
diff
changeset
|
11058 figure out a correct fix. Can anyone else tell me? -- rms. */ |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11059 int xpos = f->output_data.x->widget->core.x; |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11060 int ypos = f->output_data.x->widget->core.y; |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11061 EmacsFrameSetCharSize (f->output_data.x->edit_widget, cols, rows); |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11062 f->output_data.x->widget->core.x = xpos; |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11063 f->output_data.x->widget->core.y = ypos; |
7415
fbea5637a4b4
(x_set_window_size) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents:
7409
diff
changeset
|
11064 } |
5686
0c351de98a26
(x_set_window_size): Add USE_X_TOOLKIT conditional. Call EmacsFrameSetCharSize and return.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5685
diff
changeset
|
11065 |
0c351de98a26
(x_set_window_size): Add USE_X_TOOLKIT conditional. Call EmacsFrameSetCharSize and return.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5685
diff
changeset
|
11066 #else /* not USE_X_TOOLKIT */ |
0c351de98a26
(x_set_window_size): Add USE_X_TOOLKIT conditional. Call EmacsFrameSetCharSize and return.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5685
diff
changeset
|
11067 |
976
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
11068 check_frame_size (f, &rows, &cols); |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11069 f->output_data.x->vertical_scroll_bar_extra |
9167
8ad448b29c1c
(x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents:
9101
diff
changeset
|
11070 = (!FRAME_HAS_VERTICAL_SCROLL_BARS (f) |
8ad448b29c1c
(x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents:
9101
diff
changeset
|
11071 ? 0 |
8ad448b29c1c
(x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents:
9101
diff
changeset
|
11072 : FRAME_SCROLL_BAR_PIXEL_WIDTH (f) > 0 |
8941
71762e6d69e0
* xterm.c (x_new_font): Compute number of scrollbar columns.
Karl Heuer <kwzh@gnu.org>
parents:
8848
diff
changeset
|
11073 ? FRAME_SCROLL_BAR_PIXEL_WIDTH (f) |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11074 : (FRAME_SCROLL_BAR_COLS (f) * FONT_WIDTH (f->output_data.x->font))); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11075 f->output_data.x->flags_areas_extra |
25465 | 11076 = FRAME_FLAGS_AREA_WIDTH (f); |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
11077 pixelwidth = CHAR_TO_PIXEL_WIDTH (f, cols); |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
11078 pixelheight = CHAR_TO_PIXEL_HEIGHT (f, rows); |
286 | 11079 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11080 f->output_data.x->win_gravity = NorthWestGravity; |
11915
e2ab839155e1
(XTflash): Use pointers as args to select.
Karl Heuer <kwzh@gnu.org>
parents:
11904
diff
changeset
|
11081 x_wm_set_size_hint (f, (long) 0, 0); |
8781
98741404d3e0
Delete X11 conditionals.
Richard M. Stallman <rms@gnu.org>
parents:
8724
diff
changeset
|
11082 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11083 XSync (FRAME_X_DISPLAY (f), False); |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11084 XResizeWindow (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11085 pixelwidth, pixelheight); |
976
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
11086 |
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
11087 /* Now, strictly speaking, we can't be sure that this is accurate, |
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
11088 but the window manager will get around to dealing with the size |
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
11089 change request eventually, and we'll hear how it went when the |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11090 ConfigureNotify event gets here. |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11091 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11092 We could just not bother storing any of this information here, |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11093 and let the ConfigureNotify event set everything up, but that |
25150
1c02364724aa
(x_set_window_size): When calling change_frame_size, specify 1 for DELAY.
Richard M. Stallman <rms@gnu.org>
parents:
25101
diff
changeset
|
11094 might be kind of confusing to the Lisp code, since size changes |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11095 wouldn't be reported in the frame parameters until some random |
25150
1c02364724aa
(x_set_window_size): When calling change_frame_size, specify 1 for DELAY.
Richard M. Stallman <rms@gnu.org>
parents:
25101
diff
changeset
|
11096 point in the future when the ConfigureNotify event arrives. |
1c02364724aa
(x_set_window_size): When calling change_frame_size, specify 1 for DELAY.
Richard M. Stallman <rms@gnu.org>
parents:
25101
diff
changeset
|
11097 |
1c02364724aa
(x_set_window_size): When calling change_frame_size, specify 1 for DELAY.
Richard M. Stallman <rms@gnu.org>
parents:
25101
diff
changeset
|
11098 We pass 1 for DELAY since we can't run Lisp code inside of |
1c02364724aa
(x_set_window_size): When calling change_frame_size, specify 1 for DELAY.
Richard M. Stallman <rms@gnu.org>
parents:
25101
diff
changeset
|
11099 a BLOCK_INPUT. */ |
25360
2f3ad0a21be5
Call change_frame_size and do_pending_window_change with
Gerd Moellmann <gerd@gnu.org>
parents:
25328
diff
changeset
|
11100 change_frame_size (f, rows, cols, 0, 1, 0); |
976
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
11101 PIXEL_WIDTH (f) = pixelwidth; |
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
11102 PIXEL_HEIGHT (f) = pixelheight; |
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
11103 |
14692
e93656946a8c
(x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents:
14557
diff
changeset
|
11104 /* We've set {FRAME,PIXEL}_{WIDTH,HEIGHT} to the values we hope to |
e93656946a8c
(x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents:
14557
diff
changeset
|
11105 receive in the ConfigureNotify event; if we get what we asked |
e93656946a8c
(x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents:
14557
diff
changeset
|
11106 for, then the event won't cause the screen to become garbaged, so |
e93656946a8c
(x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents:
14557
diff
changeset
|
11107 we have to make sure to do it here. */ |
e93656946a8c
(x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents:
14557
diff
changeset
|
11108 SET_FRAME_GARBAGED (f); |
e93656946a8c
(x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents:
14557
diff
changeset
|
11109 |
e93656946a8c
(x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents:
14557
diff
changeset
|
11110 XFlush (FRAME_X_DISPLAY (f)); |
e93656946a8c
(x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents:
14557
diff
changeset
|
11111 |
e93656946a8c
(x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents:
14557
diff
changeset
|
11112 #endif /* not USE_X_TOOLKIT */ |
e93656946a8c
(x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents:
14557
diff
changeset
|
11113 |
7651
1569a13efdcd
(x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents:
7602
diff
changeset
|
11114 /* If cursor was outside the new size, mark it as off. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11115 mark_window_cursors_off (XWINDOW (f->root_window)); |
7651
1569a13efdcd
(x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents:
7602
diff
changeset
|
11116 |
14692
e93656946a8c
(x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents:
14557
diff
changeset
|
11117 /* Clear out any recollection of where the mouse highlighting was, |
e93656946a8c
(x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents:
14557
diff
changeset
|
11118 since it might be in a place that's outside the new frame size. |
e93656946a8c
(x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents:
14557
diff
changeset
|
11119 Actually checking whether it is outside is a pain in the neck, |
e93656946a8c
(x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents:
14557
diff
changeset
|
11120 so don't try--just let the highlighting be done afresh with new size. */ |
16491
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
11121 cancel_mouse_face (f); |
14692
e93656946a8c
(x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents:
14557
diff
changeset
|
11122 |
286 | 11123 UNBLOCK_INPUT; |
11124 } | |
11125 | |
12172
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
11126 /* Mouse warping. */ |
286 | 11127 |
7026
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
11128 void |
771 | 11129 x_set_mouse_position (f, x, y) |
11130 struct frame *f; | |
286 | 11131 int x, y; |
11132 { | |
11133 int pix_x, pix_y; | |
11134 | |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11135 pix_x = CHAR_TO_PIXEL_COL (f, x) + FONT_WIDTH (f->output_data.x->font) / 2; |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11136 pix_y = CHAR_TO_PIXEL_ROW (f, y) + f->output_data.x->line_height / 2; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
11137 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
11138 if (pix_x < 0) pix_x = 0; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
11139 if (pix_x > PIXEL_WIDTH (f)) pix_x = PIXEL_WIDTH (f); |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
11140 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
11141 if (pix_y < 0) pix_y = 0; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
11142 if (pix_y > PIXEL_HEIGHT (f)) pix_y = PIXEL_HEIGHT (f); |
286 | 11143 |
11144 BLOCK_INPUT; | |
11145 | |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11146 XWarpPointer (FRAME_X_DISPLAY (f), None, FRAME_X_WINDOW (f), |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11147 0, 0, 0, 0, pix_x, pix_y); |
286 | 11148 UNBLOCK_INPUT; |
11149 } | |
11150 | |
7026
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
11151 /* Move the mouse to position pixel PIX_X, PIX_Y relative to frame F. */ |
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
11152 |
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
11153 void |
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
11154 x_set_mouse_pixel_position (f, pix_x, pix_y) |
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
11155 struct frame *f; |
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
11156 int pix_x, pix_y; |
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
11157 { |
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
11158 BLOCK_INPUT; |
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
11159 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11160 XWarpPointer (FRAME_X_DISPLAY (f), None, FRAME_X_WINDOW (f), |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11161 0, 0, 0, 0, pix_x, pix_y); |
7026
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
11162 UNBLOCK_INPUT; |
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
11163 } |
12172
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
11164 |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
11165 /* focus shifting, raising and lowering. */ |
7026
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
11166 |
21514 | 11167 void |
771 | 11168 x_focus_on_frame (f) |
11169 struct frame *f; | |
286 | 11170 { |
5156
fd78458b8c43
(XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents:
5018
diff
changeset
|
11171 #if 0 /* This proves to be unpleasant. */ |
771 | 11172 x_raise_frame (f); |
5156
fd78458b8c43
(XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents:
5018
diff
changeset
|
11173 #endif |
369 | 11174 #if 0 |
11175 /* I don't think that the ICCCM allows programs to do things like this | |
11176 without the interaction of the window manager. Whatever you end up | |
771 | 11177 doing with this code, do it to x_unfocus_frame too. */ |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11178 XSetInputFocus (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
286 | 11179 RevertToPointerRoot, CurrentTime); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
11180 #endif /* ! 0 */ |
286 | 11181 } |
11182 | |
21514 | 11183 void |
771 | 11184 x_unfocus_frame (f) |
11185 struct frame *f; | |
286 | 11186 { |
369 | 11187 #if 0 |
771 | 11188 /* Look at the remarks in x_focus_on_frame. */ |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
11189 if (FRAME_X_DISPLAY_INFO (f)->x_focus_frame == f) |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11190 XSetInputFocus (FRAME_X_DISPLAY (f), PointerRoot, |
286 | 11191 RevertToPointerRoot, CurrentTime); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
11192 #endif /* ! 0 */ |
286 | 11193 } |
11194 | |
771 | 11195 /* Raise frame F. */ |
11196 | |
21514 | 11197 void |
771 | 11198 x_raise_frame (f) |
11199 struct frame *f; | |
286 | 11200 { |
1658
452ba03935d7
* xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents:
1530
diff
changeset
|
11201 if (f->async_visible) |
286 | 11202 { |
11203 BLOCK_INPUT; | |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11204 #ifdef USE_X_TOOLKIT |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11205 XRaiseWindow (FRAME_X_DISPLAY (f), XtWindow (f->output_data.x->widget)); |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11206 #else /* not USE_X_TOOLKIT */ |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11207 XRaiseWindow (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f)); |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11208 #endif /* not USE_X_TOOLKIT */ |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11209 XFlush (FRAME_X_DISPLAY (f)); |
286 | 11210 UNBLOCK_INPUT; |
11211 } | |
11212 } | |
11213 | |
771 | 11214 /* Lower frame F. */ |
11215 | |
21514 | 11216 void |
771 | 11217 x_lower_frame (f) |
11218 struct frame *f; | |
286 | 11219 { |
1658
452ba03935d7
* xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents:
1530
diff
changeset
|
11220 if (f->async_visible) |
286 | 11221 { |
11222 BLOCK_INPUT; | |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11223 #ifdef USE_X_TOOLKIT |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11224 XLowerWindow (FRAME_X_DISPLAY (f), XtWindow (f->output_data.x->widget)); |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11225 #else /* not USE_X_TOOLKIT */ |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11226 XLowerWindow (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f)); |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11227 #endif /* not USE_X_TOOLKIT */ |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11228 XFlush (FRAME_X_DISPLAY (f)); |
286 | 11229 UNBLOCK_INPUT; |
11230 } | |
11231 } | |
11232 | |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11233 static void |
14411
bac274f178b0
(XTframe_raise_lower): Rename arg `raise' to `raise_flag'.
Richard M. Stallman <rms@gnu.org>
parents:
14305
diff
changeset
|
11234 XTframe_raise_lower (f, raise_flag) |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11235 FRAME_PTR f; |
14411
bac274f178b0
(XTframe_raise_lower): Rename arg `raise' to `raise_flag'.
Richard M. Stallman <rms@gnu.org>
parents:
14305
diff
changeset
|
11236 int raise_flag; |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11237 { |
14411
bac274f178b0
(XTframe_raise_lower): Rename arg `raise' to `raise_flag'.
Richard M. Stallman <rms@gnu.org>
parents:
14305
diff
changeset
|
11238 if (raise_flag) |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11239 x_raise_frame (f); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11240 else |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11241 x_lower_frame (f); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11242 } |
12172
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
11243 |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
11244 /* Change of visibility. */ |
286 | 11245 |
12192
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
11246 /* This tries to wait until the frame is really visible. |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
11247 However, if the window manager asks the user where to position |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
11248 the frame, this will return before the user finishes doing that. |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
11249 The frame will not actually be visible at that time, |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
11250 but it will become visible later when the window manager |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
11251 finishes with it. */ |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
11252 |
21514 | 11253 void |
771 | 11254 x_make_frame_visible (f) |
11255 struct frame *f; | |
286 | 11256 { |
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
11257 Lisp_Object type; |
17963
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11258 int original_top, original_left; |
286 | 11259 |
429 | 11260 BLOCK_INPUT; |
11261 | |
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
11262 type = x_icon_type (f); |
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
11263 if (!NILP (type)) |
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
11264 x_bitmap_icon (f, type); |
9446
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
11265 |
771 | 11266 if (! FRAME_VISIBLE_P (f)) |
286 | 11267 { |
17963
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11268 /* We test FRAME_GARBAGED_P here to make sure we don't |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11269 call x_set_offset a second time |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11270 if we get to x_make_frame_visible a second time |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11271 before the window gets really visible. */ |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11272 if (! FRAME_ICONIFIED_P (f) |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11273 && ! f->output_data.x->asked_for_visible) |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11274 x_set_offset (f, f->output_data.x->left_pos, f->output_data.x->top_pos, 0); |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11275 |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11276 f->output_data.x->asked_for_visible = 1; |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11277 |
429 | 11278 if (! EQ (Vx_no_window_manager, Qt)) |
771 | 11279 x_wm_set_window_state (f, NormalState); |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11280 #ifdef USE_X_TOOLKIT |
7167
2fa74c48e4e5
(x_make_frame_visible): Use XtMapWidget, not XtPopup.
Richard M. Stallman <rms@gnu.org>
parents:
7128
diff
changeset
|
11281 /* This was XtPopup, but that did nothing for an iconified frame. */ |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11282 XtMapWidget (f->output_data.x->widget); |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11283 #else /* not USE_X_TOOLKIT */ |
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
11284 XMapRaised (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f)); |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11285 #endif /* not USE_X_TOOLKIT */ |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11286 #if 0 /* This seems to bring back scroll bars in the wrong places |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11287 if the window configuration has changed. They seem |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11288 to come back ok without this. */ |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
11289 if (FRAME_HAS_VERTICAL_SCROLL_BARS (f)) |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11290 XMapSubwindows (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f)); |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11291 #endif |
429 | 11292 } |
286 | 11293 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11294 XFlush (FRAME_X_DISPLAY (f)); |
429 | 11295 |
7959
224440646fa7
(make_frame_visible): At end, wait till Emacs sees frame is visible.
Richard M. Stallman <rms@gnu.org>
parents:
7935
diff
changeset
|
11296 /* Synchronize to ensure Emacs knows the frame is visible |
224440646fa7
(make_frame_visible): At end, wait till Emacs sees frame is visible.
Richard M. Stallman <rms@gnu.org>
parents:
7935
diff
changeset
|
11297 before we do anything else. We do this loop with input not blocked |
224440646fa7
(make_frame_visible): At end, wait till Emacs sees frame is visible.
Richard M. Stallman <rms@gnu.org>
parents:
7935
diff
changeset
|
11298 so that incoming events are handled. */ |
224440646fa7
(make_frame_visible): At end, wait till Emacs sees frame is visible.
Richard M. Stallman <rms@gnu.org>
parents:
7935
diff
changeset
|
11299 { |
224440646fa7
(make_frame_visible): At end, wait till Emacs sees frame is visible.
Richard M. Stallman <rms@gnu.org>
parents:
7935
diff
changeset
|
11300 Lisp_Object frame; |
27040
900a02429efa
(x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents:
27000
diff
changeset
|
11301 int count; |
18528
73f4d9258f04
(x_make_frame_visible): Check has_been_visible
Richard M. Stallman <rms@gnu.org>
parents:
18347
diff
changeset
|
11302 /* This must be before UNBLOCK_INPUT |
73f4d9258f04
(x_make_frame_visible): Check has_been_visible
Richard M. Stallman <rms@gnu.org>
parents:
18347
diff
changeset
|
11303 since events that arrive in response to the actions above |
73f4d9258f04
(x_make_frame_visible): Check has_been_visible
Richard M. Stallman <rms@gnu.org>
parents:
18347
diff
changeset
|
11304 will set it when they are handled. */ |
73f4d9258f04
(x_make_frame_visible): Check has_been_visible
Richard M. Stallman <rms@gnu.org>
parents:
18347
diff
changeset
|
11305 int previously_visible = f->output_data.x->has_been_visible; |
17963
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11306 |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11307 original_left = f->output_data.x->left_pos; |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11308 original_top = f->output_data.x->top_pos; |
9337
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
11309 |
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
11310 /* This must come after we set COUNT. */ |
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
11311 UNBLOCK_INPUT; |
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
11312 |
22907
43e290c6fb19
(x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents:
22773
diff
changeset
|
11313 /* We unblock here so that arriving X events are processed. */ |
17963
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11314 |
18008
d25d2472df51
(XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents:
17963
diff
changeset
|
11315 /* Now move the window back to where it was "supposed to be". |
d25d2472df51
(XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents:
17963
diff
changeset
|
11316 But don't do it if the gravity is negative. |
d25d2472df51
(XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents:
17963
diff
changeset
|
11317 When the gravity is negative, this uses a position |
18528
73f4d9258f04
(x_make_frame_visible): Check has_been_visible
Richard M. Stallman <rms@gnu.org>
parents:
18347
diff
changeset
|
11318 that is 3 pixels too low. Perhaps that's really the border width. |
73f4d9258f04
(x_make_frame_visible): Check has_been_visible
Richard M. Stallman <rms@gnu.org>
parents:
18347
diff
changeset
|
11319 |
73f4d9258f04
(x_make_frame_visible): Check has_been_visible
Richard M. Stallman <rms@gnu.org>
parents:
18347
diff
changeset
|
11320 Don't do this if the window has never been visible before, |
73f4d9258f04
(x_make_frame_visible): Check has_been_visible
Richard M. Stallman <rms@gnu.org>
parents:
18347
diff
changeset
|
11321 because the window manager may choose the position |
73f4d9258f04
(x_make_frame_visible): Check has_been_visible
Richard M. Stallman <rms@gnu.org>
parents:
18347
diff
changeset
|
11322 and we don't want to override it. */ |
18008
d25d2472df51
(XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents:
17963
diff
changeset
|
11323 |
18630
3e414b9da546
(x_make_frame_visible): Don't move the frame
Richard M. Stallman <rms@gnu.org>
parents:
18528
diff
changeset
|
11324 if (! FRAME_VISIBLE_P (f) && ! FRAME_ICONIFIED_P (f) |
18074
06e42aa4c208
(process_expose_from_menu, XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents:
18057
diff
changeset
|
11325 && f->output_data.x->win_gravity == NorthWestGravity |
18528
73f4d9258f04
(x_make_frame_visible): Check has_been_visible
Richard M. Stallman <rms@gnu.org>
parents:
18347
diff
changeset
|
11326 && previously_visible) |
17963
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11327 { |
22907
43e290c6fb19
(x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents:
22773
diff
changeset
|
11328 Drawable rootw; |
43e290c6fb19
(x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents:
22773
diff
changeset
|
11329 int x, y; |
43e290c6fb19
(x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents:
22773
diff
changeset
|
11330 unsigned int width, height, border, depth; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11331 |
17963
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11332 BLOCK_INPUT; |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11333 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11334 /* On some window managers (such as FVWM) moving an existing |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11335 window, even to the same place, causes the window manager |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11336 to introduce an offset. This can cause the window to move |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11337 to an unexpected location. Check the geometry (a little |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11338 slow here) and then verify that the window is in the right |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11339 place. If the window is not in the right place, move it |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11340 there, and take the potential window manager hit. */ |
22907
43e290c6fb19
(x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents:
22773
diff
changeset
|
11341 XGetGeometry (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f), |
43e290c6fb19
(x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents:
22773
diff
changeset
|
11342 &rootw, &x, &y, &width, &height, &border, &depth); |
43e290c6fb19
(x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents:
22773
diff
changeset
|
11343 |
43e290c6fb19
(x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents:
22773
diff
changeset
|
11344 if (original_left != x || original_top != y) |
43e290c6fb19
(x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents:
22773
diff
changeset
|
11345 XMoveWindow (FRAME_X_DISPLAY (f), FRAME_OUTER_WINDOW (f), |
43e290c6fb19
(x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents:
22773
diff
changeset
|
11346 original_left, original_top); |
43e290c6fb19
(x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents:
22773
diff
changeset
|
11347 |
17963
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11348 UNBLOCK_INPUT; |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11349 } |
17953
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11350 |
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
11351 XSETFRAME (frame, f); |
9337
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
11352 |
27040
900a02429efa
(x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents:
27000
diff
changeset
|
11353 /* Wait until the frame is visible. Process X events until a |
900a02429efa
(x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents:
27000
diff
changeset
|
11354 MapNotify event has been seen, or until we think we won't get a |
900a02429efa
(x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents:
27000
diff
changeset
|
11355 MapNotify at all.. */ |
900a02429efa
(x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents:
27000
diff
changeset
|
11356 for (count = input_signal_count + 10; |
900a02429efa
(x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents:
27000
diff
changeset
|
11357 input_signal_count < count && !FRAME_VISIBLE_P (f);) |
8098
e44c31d682b1
(x_draw_box): Use curs_x and curs_y, not f->cursor_[xy].
Richard M. Stallman <rms@gnu.org>
parents:
8036
diff
changeset
|
11358 { |
27040
900a02429efa
(x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents:
27000
diff
changeset
|
11359 /* Force processing of queued events. */ |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11360 x_sync (f); |
27040
900a02429efa
(x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents:
27000
diff
changeset
|
11361 |
900a02429efa
(x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents:
27000
diff
changeset
|
11362 /* Machines that do polling rather than SIGIO have been |
900a02429efa
(x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents:
27000
diff
changeset
|
11363 observed to go into a busy-wait here. So we'll fake an |
900a02429efa
(x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents:
27000
diff
changeset
|
11364 alarm signal to let the handler know that there's something |
900a02429efa
(x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents:
27000
diff
changeset
|
11365 to be read. We used to raise a real alarm, but it seems |
900a02429efa
(x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents:
27000
diff
changeset
|
11366 that the handler isn't always enabled here. This is |
900a02429efa
(x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents:
27000
diff
changeset
|
11367 probably a bug. */ |
8682
42f95b1368ea
(x_make_frame_visible): Call input_polling_used.
Richard M. Stallman <rms@gnu.org>
parents:
8652
diff
changeset
|
11368 if (input_polling_used ()) |
8652 | 11369 { |
27040
900a02429efa
(x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents:
27000
diff
changeset
|
11370 /* It could be confusing if a real alarm arrives while |
900a02429efa
(x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents:
27000
diff
changeset
|
11371 processing the fake one. Turn it off and let the |
900a02429efa
(x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents:
27000
diff
changeset
|
11372 handler reset it. */ |
8652 | 11373 alarm (0); |
20364
8e58003a8d02
(x_make_frame_visible): Give dummy arg to
Kenichi Handa <handa@m17n.org>
parents:
20182
diff
changeset
|
11374 input_poll_signal (0); |
8652 | 11375 } |
27040
900a02429efa
(x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents:
27000
diff
changeset
|
11376 |
900a02429efa
(x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents:
27000
diff
changeset
|
11377 /* See if a MapNotify event has been processed. */ |
900a02429efa
(x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents:
27000
diff
changeset
|
11378 FRAME_SAMPLE_VISIBILITY (f); |
8098
e44c31d682b1
(x_draw_box): Use curs_x and curs_y, not f->cursor_[xy].
Richard M. Stallman <rms@gnu.org>
parents:
8036
diff
changeset
|
11379 } |
7959
224440646fa7
(make_frame_visible): At end, wait till Emacs sees frame is visible.
Richard M. Stallman <rms@gnu.org>
parents:
7935
diff
changeset
|
11380 } |
286 | 11381 } |
11382 | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11383 /* Change from mapped state to withdrawn state. */ |
286 | 11384 |
12172
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
11385 /* Make the frame visible (mapped and not iconified). */ |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
11386 |
21514 | 11387 void |
771 | 11388 x_make_frame_invisible (f) |
11389 struct frame *f; | |
286 | 11390 { |
7602
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11391 Window window; |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11392 |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11393 #ifdef USE_X_TOOLKIT |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11394 /* Use the frame's outermost window, not the one we normally draw on. */ |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11395 window = XtWindow (f->output_data.x->widget); |
7602
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11396 #else /* not USE_X_TOOLKIT */ |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11397 window = FRAME_X_WINDOW (f); |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11398 #endif /* not USE_X_TOOLKIT */ |
286 | 11399 |
3284
a47979ffad1e
(XTread_socket): For UnmapNotify, if frame was visible,
Richard M. Stallman <rms@gnu.org>
parents:
3282
diff
changeset
|
11400 /* Don't keep the highlight on an invisible frame. */ |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
11401 if (FRAME_X_DISPLAY_INFO (f)->x_highlight_frame == f) |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
11402 FRAME_X_DISPLAY_INFO (f)->x_highlight_frame = 0; |
3284
a47979ffad1e
(XTread_socket): For UnmapNotify, if frame was visible,
Richard M. Stallman <rms@gnu.org>
parents:
3282
diff
changeset
|
11403 |
6983
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
11404 #if 0/* This might add unreliability; I don't trust it -- rms. */ |
3284
a47979ffad1e
(XTread_socket): For UnmapNotify, if frame was visible,
Richard M. Stallman <rms@gnu.org>
parents:
3282
diff
changeset
|
11405 if (! f->async_visible && ! f->async_iconified) |
286 | 11406 return; |
6983
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
11407 #endif |
286 | 11408 |
11409 BLOCK_INPUT; | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
11410 |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11411 /* Before unmapping the window, update the WM_SIZE_HINTS property to claim |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11412 that the current position of the window is user-specified, rather than |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11413 program-specified, so that when the window is mapped again, it will be |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11414 placed at the same location, without forcing the user to position it |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11415 by hand again (they have already done that once for this window.) */ |
11915
e2ab839155e1
(XTflash): Use pointers as args to select.
Karl Heuer <kwzh@gnu.org>
parents:
11904
diff
changeset
|
11416 x_wm_set_size_hint (f, (long) 0, 1); |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11417 |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
11418 #ifdef HAVE_X11R4 |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
11419 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11420 if (! XWithdrawWindow (FRAME_X_DISPLAY (f), window, |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11421 DefaultScreen (FRAME_X_DISPLAY (f)))) |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
11422 { |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
11423 UNBLOCK_INPUT_RESIGNAL; |
7602
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11424 error ("Can't notify window manager of window withdrawal"); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
11425 } |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
11426 #else /* ! defined (HAVE_X11R4) */ |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
11427 |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
11428 /* Tell the window manager what we're going to do. */ |
286 | 11429 if (! EQ (Vx_no_window_manager, Qt)) |
11430 { | |
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11431 XEvent unmap; |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11432 |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11433 unmap.xunmap.type = UnmapNotify; |
7602
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11434 unmap.xunmap.window = window; |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11435 unmap.xunmap.event = DefaultRootWindow (FRAME_X_DISPLAY (f)); |
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11436 unmap.xunmap.from_configure = False; |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11437 if (! XSendEvent (FRAME_X_DISPLAY (f), |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11438 DefaultRootWindow (FRAME_X_DISPLAY (f)), |
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11439 False, |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11440 SubstructureRedirectMaskSubstructureNotifyMask, |
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11441 &unmap)) |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11442 { |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11443 UNBLOCK_INPUT_RESIGNAL; |
7602
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11444 error ("Can't notify window manager of withdrawal"); |
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11445 } |
286 | 11446 } |
11447 | |
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11448 /* Unmap the window ourselves. Cheeky! */ |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11449 XUnmapWindow (FRAME_X_DISPLAY (f), window); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
11450 #endif /* ! defined (HAVE_X11R4) */ |
286 | 11451 |
6983
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
11452 /* We can't distinguish this from iconification |
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
11453 just by the event that we get from the server. |
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
11454 So we can't win using the usual strategy of letting |
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
11455 FRAME_SAMPLE_VISIBILITY set this. So do it by hand, |
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
11456 and synchronize with the server to make sure we agree. */ |
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
11457 f->visible = 0; |
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
11458 FRAME_ICONIFIED_P (f) = 0; |
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
11459 f->async_visible = 0; |
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
11460 f->async_iconified = 0; |
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
11461 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11462 x_sync (f); |
6983
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
11463 |
286 | 11464 UNBLOCK_INPUT; |
11465 } | |
11466 | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11467 /* Change window state from mapped to iconified. */ |
286 | 11468 |
21514 | 11469 void |
771 | 11470 x_iconify_frame (f) |
11471 struct frame *f; | |
286 | 11472 { |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11473 int result; |
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
11474 Lisp_Object type; |
286 | 11475 |
3284
a47979ffad1e
(XTread_socket): For UnmapNotify, if frame was visible,
Richard M. Stallman <rms@gnu.org>
parents:
3282
diff
changeset
|
11476 /* Don't keep the highlight on an invisible frame. */ |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
11477 if (FRAME_X_DISPLAY_INFO (f)->x_highlight_frame == f) |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
11478 FRAME_X_DISPLAY_INFO (f)->x_highlight_frame = 0; |
3284
a47979ffad1e
(XTread_socket): For UnmapNotify, if frame was visible,
Richard M. Stallman <rms@gnu.org>
parents:
3282
diff
changeset
|
11479 |
1658
452ba03935d7
* xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents:
1530
diff
changeset
|
11480 if (f->async_iconified) |
286 | 11481 return; |
11482 | |
9446
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
11483 BLOCK_INPUT; |
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
11484 |
13627
8873aa3451dd
(XTmouse_position): Exit the loop if child == win.
Richard M. Stallman <rms@gnu.org>
parents:
13598
diff
changeset
|
11485 FRAME_SAMPLE_VISIBILITY (f); |
8873aa3451dd
(XTmouse_position): Exit the loop if child == win.
Richard M. Stallman <rms@gnu.org>
parents:
13598
diff
changeset
|
11486 |
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
11487 type = x_icon_type (f); |
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
11488 if (!NILP (type)) |
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
11489 x_bitmap_icon (f, type); |
9446
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
11490 |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11491 #ifdef USE_X_TOOLKIT |
7602
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11492 |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11493 if (! FRAME_VISIBLE_P (f)) |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11494 { |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11495 if (! EQ (Vx_no_window_manager, Qt)) |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11496 x_wm_set_window_state (f, IconicState); |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11497 /* This was XtPopup, but that did nothing for an iconified frame. */ |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11498 XtMapWidget (f->output_data.x->widget); |
15472
300b52e37681
(x_iconify_frame): If frame is invisible, explicitly mark it as iconified.
Richard M. Stallman <rms@gnu.org>
parents:
15376
diff
changeset
|
11499 /* The server won't give us any event to indicate |
300b52e37681
(x_iconify_frame): If frame is invisible, explicitly mark it as iconified.
Richard M. Stallman <rms@gnu.org>
parents:
15376
diff
changeset
|
11500 that an invisible frame was changed to an icon, |
300b52e37681
(x_iconify_frame): If frame is invisible, explicitly mark it as iconified.
Richard M. Stallman <rms@gnu.org>
parents:
15376
diff
changeset
|
11501 so we have to record it here. */ |
300b52e37681
(x_iconify_frame): If frame is invisible, explicitly mark it as iconified.
Richard M. Stallman <rms@gnu.org>
parents:
15376
diff
changeset
|
11502 f->iconified = 1; |
16753
ab63a77c3a23
(x_iconify_frame): Clear visible when we set iconified.
Richard M. Stallman <rms@gnu.org>
parents:
16491
diff
changeset
|
11503 f->visible = 1; |
15472
300b52e37681
(x_iconify_frame): If frame is invisible, explicitly mark it as iconified.
Richard M. Stallman <rms@gnu.org>
parents:
15376
diff
changeset
|
11504 f->async_iconified = 1; |
16753
ab63a77c3a23
(x_iconify_frame): Clear visible when we set iconified.
Richard M. Stallman <rms@gnu.org>
parents:
16491
diff
changeset
|
11505 f->async_visible = 0; |
7602
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11506 UNBLOCK_INPUT; |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11507 return; |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11508 } |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11509 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11510 result = XIconifyWindow (FRAME_X_DISPLAY (f), |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11511 XtWindow (f->output_data.x->widget), |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11512 DefaultScreen (FRAME_X_DISPLAY (f))); |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11513 UNBLOCK_INPUT; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11514 |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11515 if (!result) |
7602
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11516 error ("Can't notify window manager of iconification"); |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11517 |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11518 f->async_iconified = 1; |
16753
ab63a77c3a23
(x_iconify_frame): Clear visible when we set iconified.
Richard M. Stallman <rms@gnu.org>
parents:
16491
diff
changeset
|
11519 f->async_visible = 0; |
ab63a77c3a23
(x_iconify_frame): Clear visible when we set iconified.
Richard M. Stallman <rms@gnu.org>
parents:
16491
diff
changeset
|
11520 |
5740
48da4ed089e9
(x_iconify_frame): Fix misbalanced BLOCK_INPUT/UNBLOCK_INPUT.
Karl Heuer <kwzh@gnu.org>
parents:
5737
diff
changeset
|
11521 |
48da4ed089e9
(x_iconify_frame): Fix misbalanced BLOCK_INPUT/UNBLOCK_INPUT.
Karl Heuer <kwzh@gnu.org>
parents:
5737
diff
changeset
|
11522 BLOCK_INPUT; |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11523 XFlush (FRAME_X_DISPLAY (f)); |
5740
48da4ed089e9
(x_iconify_frame): Fix misbalanced BLOCK_INPUT/UNBLOCK_INPUT.
Karl Heuer <kwzh@gnu.org>
parents:
5737
diff
changeset
|
11524 UNBLOCK_INPUT; |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11525 #else /* not USE_X_TOOLKIT */ |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11526 |
7738
a810335742bb
(x_iconify_frame): Call x_set_offset,
Richard M. Stallman <rms@gnu.org>
parents:
7706
diff
changeset
|
11527 /* Make sure the X server knows where the window should be positioned, |
a810335742bb
(x_iconify_frame): Call x_set_offset,
Richard M. Stallman <rms@gnu.org>
parents:
7706
diff
changeset
|
11528 in case the user deiconifies with the window manager. */ |
a810335742bb
(x_iconify_frame): Call x_set_offset,
Richard M. Stallman <rms@gnu.org>
parents:
7706
diff
changeset
|
11529 if (! FRAME_VISIBLE_P (f) && !FRAME_ICONIFIED_P (f)) |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11530 x_set_offset (f, f->output_data.x->left_pos, f->output_data.x->top_pos, 0); |
7738
a810335742bb
(x_iconify_frame): Call x_set_offset,
Richard M. Stallman <rms@gnu.org>
parents:
7706
diff
changeset
|
11531 |
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11532 /* Since we don't know which revision of X we're running, we'll use both |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11533 the X11R3 and X11R4 techniques. I don't know if this is a good idea. */ |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11534 |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11535 /* X11R4: send a ClientMessage to the window manager using the |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11536 WM_CHANGE_STATE type. */ |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11537 { |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11538 XEvent message; |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
11539 |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
11540 message.xclient.window = FRAME_X_WINDOW (f); |
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11541 message.xclient.type = ClientMessage; |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11542 message.xclient.message_type = FRAME_X_DISPLAY_INFO (f)->Xatom_wm_change_state; |
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11543 message.xclient.format = 32; |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11544 message.xclient.data.l[0] = IconicState; |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11545 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11546 if (! XSendEvent (FRAME_X_DISPLAY (f), |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11547 DefaultRootWindow (FRAME_X_DISPLAY (f)), |
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11548 False, |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11549 SubstructureRedirectMask | SubstructureNotifyMask, |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11550 &message)) |
286 | 11551 { |
11552 UNBLOCK_INPUT_RESIGNAL; | |
7602
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11553 error ("Can't notify window manager of iconification"); |
286 | 11554 } |
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11555 } |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11556 |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
11557 /* X11R3: set the initial_state field of the window manager hints to |
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11558 IconicState. */ |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11559 x_wm_set_window_state (f, IconicState); |
286 | 11560 |
4304
b5014da888a8
(x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents:
4277
diff
changeset
|
11561 if (!FRAME_VISIBLE_P (f)) |
b5014da888a8
(x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents:
4277
diff
changeset
|
11562 { |
b5014da888a8
(x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents:
4277
diff
changeset
|
11563 /* If the frame was withdrawn, before, we must map it. */ |
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
11564 XMapRaised (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f)); |
4304
b5014da888a8
(x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents:
4277
diff
changeset
|
11565 } |
b5014da888a8
(x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents:
4277
diff
changeset
|
11566 |
1658
452ba03935d7
* xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents:
1530
diff
changeset
|
11567 f->async_iconified = 1; |
16753
ab63a77c3a23
(x_iconify_frame): Clear visible when we set iconified.
Richard M. Stallman <rms@gnu.org>
parents:
16491
diff
changeset
|
11568 f->async_visible = 0; |
286 | 11569 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11570 XFlush (FRAME_X_DISPLAY (f)); |
286 | 11571 UNBLOCK_INPUT; |
5740
48da4ed089e9
(x_iconify_frame): Fix misbalanced BLOCK_INPUT/UNBLOCK_INPUT.
Karl Heuer <kwzh@gnu.org>
parents:
5737
diff
changeset
|
11572 #endif /* not USE_X_TOOLKIT */ |
286 | 11573 } |
12172
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
11574 |
1810
bf618128d973
* xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents:
1803
diff
changeset
|
11575 /* Destroy the X window of frame F. */ |
bf618128d973
* xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents:
1803
diff
changeset
|
11576 |
21514 | 11577 void |
1810
bf618128d973
* xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents:
1803
diff
changeset
|
11578 x_destroy_window (f) |
771 | 11579 struct frame *f; |
286 | 11580 { |
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
11581 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
11582 |
286 | 11583 BLOCK_INPUT; |
1810
bf618128d973
* xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents:
1803
diff
changeset
|
11584 |
14489
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
11585 /* If a display connection is dead, don't try sending more |
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
11586 commands to the X server. */ |
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
11587 if (dpyinfo->display != 0) |
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
11588 { |
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
11589 if (f->output_data.x->icon_desc != 0) |
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
11590 XDestroyWindow (FRAME_X_DISPLAY (f), f->output_data.x->icon_desc); |
14830
34db919835d3
(x_destroy_window) [HAVE_X_I18N]: Free xic and xim of frame.
Richard M. Stallman <rms@gnu.org>
parents:
14826
diff
changeset
|
11591 #ifdef HAVE_X_I18N |
34db919835d3
(x_destroy_window) [HAVE_X_I18N]: Free xic and xim of frame.
Richard M. Stallman <rms@gnu.org>
parents:
14826
diff
changeset
|
11592 if (FRAME_XIM (f)) |
34db919835d3
(x_destroy_window) [HAVE_X_I18N]: Free xic and xim of frame.
Richard M. Stallman <rms@gnu.org>
parents:
14826
diff
changeset
|
11593 { |
34db919835d3
(x_destroy_window) [HAVE_X_I18N]: Free xic and xim of frame.
Richard M. Stallman <rms@gnu.org>
parents:
14826
diff
changeset
|
11594 XDestroyIC (FRAME_XIC (f)); |
14942
3432e5570488
(x_destroy_window): Do call XCloseIM if X11R6.
Richard M. Stallman <rms@gnu.org>
parents:
14921
diff
changeset
|
11595 #if ! defined (SOLARIS2) || defined (HAVE_X11R6) |
3432e5570488
(x_destroy_window): Do call XCloseIM if X11R6.
Richard M. Stallman <rms@gnu.org>
parents:
14921
diff
changeset
|
11596 /* This line causes crashes on Solaris with Openwin, |
3432e5570488
(x_destroy_window): Do call XCloseIM if X11R6.
Richard M. Stallman <rms@gnu.org>
parents:
14921
diff
changeset
|
11597 due to an apparent bug in XCloseIM. |
3432e5570488
(x_destroy_window): Do call XCloseIM if X11R6.
Richard M. Stallman <rms@gnu.org>
parents:
14921
diff
changeset
|
11598 X11R6 seems not to have the bug. */ |
14830
34db919835d3
(x_destroy_window) [HAVE_X_I18N]: Free xic and xim of frame.
Richard M. Stallman <rms@gnu.org>
parents:
14826
diff
changeset
|
11599 XCloseIM (FRAME_XIM (f)); |
14921
5a1524631bca
(x_destroy_window) [SOLARIS2]: Don't free the IC or IM.
Richard M. Stallman <rms@gnu.org>
parents:
14896
diff
changeset
|
11600 #endif |
14830
34db919835d3
(x_destroy_window) [HAVE_X_I18N]: Free xic and xim of frame.
Richard M. Stallman <rms@gnu.org>
parents:
14826
diff
changeset
|
11601 } |
34db919835d3
(x_destroy_window) [HAVE_X_I18N]: Free xic and xim of frame.
Richard M. Stallman <rms@gnu.org>
parents:
14826
diff
changeset
|
11602 #endif |
14489
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
11603 XDestroyWindow (FRAME_X_DISPLAY (f), f->output_data.x->window_desc); |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11604 #ifdef USE_X_TOOLKIT |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11605 if (f->output_data.x->widget) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11606 XtDestroyWidget (f->output_data.x->widget); |
14489
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
11607 free_frame_menubar (f); |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11608 #endif /* USE_X_TOOLKIT */ |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11609 |
14489
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
11610 free_frame_faces (f); |
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
11611 XFlush (FRAME_X_DISPLAY (f)); |
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
11612 } |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11613 |
17575 | 11614 if (f->output_data.x->saved_menu_event) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11615 xfree (f->output_data.x->saved_menu_event); |
17574
7fe6de4949e4
(x_destroy_window): Free saved_menu_event, if any.
Richard M. Stallman <rms@gnu.org>
parents:
17519
diff
changeset
|
11616 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11617 xfree (f->output_data.x); |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11618 f->output_data.x = 0; |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
11619 if (f == dpyinfo->x_focus_frame) |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
11620 dpyinfo->x_focus_frame = 0; |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
11621 if (f == dpyinfo->x_focus_event_frame) |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
11622 dpyinfo->x_focus_event_frame = 0; |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
11623 if (f == dpyinfo->x_highlight_frame) |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
11624 dpyinfo->x_highlight_frame = 0; |
1810
bf618128d973
* xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents:
1803
diff
changeset
|
11625 |
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
11626 dpyinfo->reference_count--; |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
11627 |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
11628 if (f == dpyinfo->mouse_face_mouse_frame) |
6934
e0ab4f59004e
(dumpglyphs): When HL=2, check explicitly for using
Richard M. Stallman <rms@gnu.org>
parents:
6883
diff
changeset
|
11629 { |
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
11630 dpyinfo->mouse_face_beg_row |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
11631 = dpyinfo->mouse_face_beg_col = -1; |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
11632 dpyinfo->mouse_face_end_row |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
11633 = dpyinfo->mouse_face_end_col = -1; |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
11634 dpyinfo->mouse_face_window = Qnil; |
21017
1ecfba12016a
(XTframe_up_to_date): Check that mouse_face_mouse_frame
Richard M. Stallman <rms@gnu.org>
parents:
20632
diff
changeset
|
11635 dpyinfo->mouse_face_deferred_gc = 0; |
1ecfba12016a
(XTframe_up_to_date): Check that mouse_face_mouse_frame
Richard M. Stallman <rms@gnu.org>
parents:
20632
diff
changeset
|
11636 dpyinfo->mouse_face_mouse_frame = 0; |
6934
e0ab4f59004e
(dumpglyphs): When HL=2, check explicitly for using
Richard M. Stallman <rms@gnu.org>
parents:
6883
diff
changeset
|
11637 } |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11638 |
1810
bf618128d973
* xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents:
1803
diff
changeset
|
11639 UNBLOCK_INPUT; |
286 | 11640 } |
11641 | |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
11642 /* Setting window manager hints. */ |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
11643 |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11644 /* Set the normal size hints for the window manager, for frame F. |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11645 FLAGS is the flags word to use--or 0 meaning preserve the flags |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11646 that the window now has. |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11647 If USER_POSITION is nonzero, we set the USPosition |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11648 flag (this is useful when FLAGS is 0). */ |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11649 |
21514 | 11650 void |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11651 x_wm_set_size_hint (f, flags, user_position) |
771 | 11652 struct frame *f; |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11653 long flags; |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11654 int user_position; |
286 | 11655 { |
11656 XSizeHints size_hints; | |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11657 |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11658 #ifdef USE_X_TOOLKIT |
6631
eea1789dc6fd
(x_wm_set_size_hint): Add USE_X_TOOLKIT conditional and call
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6626
diff
changeset
|
11659 Arg al[2]; |
eea1789dc6fd
(x_wm_set_size_hint): Add USE_X_TOOLKIT conditional and call
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6626
diff
changeset
|
11660 int ac = 0; |
eea1789dc6fd
(x_wm_set_size_hint): Add USE_X_TOOLKIT conditional and call
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6626
diff
changeset
|
11661 Dimension widget_width, widget_height; |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11662 Window window = XtWindow (f->output_data.x->widget); |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11663 #else /* not USE_X_TOOLKIT */ |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
11664 Window window = FRAME_X_WINDOW (f); |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11665 #endif /* not USE_X_TOOLKIT */ |
286 | 11666 |
7187
ca0102511d80
(x_wm_set_size_hint): Don't set PMaxSize.
Richard M. Stallman <rms@gnu.org>
parents:
7169
diff
changeset
|
11667 /* Setting PMaxSize caused various problems. */ |
ca0102511d80
(x_wm_set_size_hint): Don't set PMaxSize.
Richard M. Stallman <rms@gnu.org>
parents:
7169
diff
changeset
|
11668 size_hints.flags = PResizeInc | PMinSize /* | PMaxSize */; |
286 | 11669 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11670 size_hints.x = 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:
12657
diff
changeset
|
11671 size_hints.y = f->output_data.x->top_pos; |
7123
4f2c825cc0f8
(x_wm_set_size_hint): Do set max_height, max_width, and PMaxSize flag.
Richard M. Stallman <rms@gnu.org>
parents:
7122
diff
changeset
|
11672 |
6631
eea1789dc6fd
(x_wm_set_size_hint): Add USE_X_TOOLKIT conditional and call
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6626
diff
changeset
|
11673 #ifdef USE_X_TOOLKIT |
eea1789dc6fd
(x_wm_set_size_hint): Add USE_X_TOOLKIT conditional and call
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6626
diff
changeset
|
11674 XtSetArg (al[ac], XtNwidth, &widget_width); ac++; |
eea1789dc6fd
(x_wm_set_size_hint): Add USE_X_TOOLKIT conditional and call
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6626
diff
changeset
|
11675 XtSetArg (al[ac], XtNheight, &widget_height); ac++; |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11676 XtGetValues (f->output_data.x->widget, al, ac); |
6631
eea1789dc6fd
(x_wm_set_size_hint): Add USE_X_TOOLKIT conditional and call
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6626
diff
changeset
|
11677 size_hints.height = widget_height; |
eea1789dc6fd
(x_wm_set_size_hint): Add USE_X_TOOLKIT conditional and call
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6626
diff
changeset
|
11678 size_hints.width = widget_width; |
eea1789dc6fd
(x_wm_set_size_hint): Add USE_X_TOOLKIT conditional and call
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6626
diff
changeset
|
11679 #else /* not USE_X_TOOLKIT */ |
771 | 11680 size_hints.height = PIXEL_HEIGHT (f); |
11681 size_hints.width = PIXEL_WIDTH (f); | |
6631
eea1789dc6fd
(x_wm_set_size_hint): Add USE_X_TOOLKIT conditional and call
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
6626
diff
changeset
|
11682 #endif /* not USE_X_TOOLKIT */ |
7123
4f2c825cc0f8
(x_wm_set_size_hint): Do set max_height, max_width, and PMaxSize flag.
Richard M. Stallman <rms@gnu.org>
parents:
7122
diff
changeset
|
11683 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11684 size_hints.width_inc = FONT_WIDTH (f->output_data.x->font); |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11685 size_hints.height_inc = f->output_data.x->line_height; |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11686 size_hints.max_width |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11687 = FRAME_X_DISPLAY_INFO (f)->width - CHAR_TO_PIXEL_WIDTH (f, 0); |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11688 size_hints.max_height |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11689 = FRAME_X_DISPLAY_INFO (f)->height - CHAR_TO_PIXEL_HEIGHT (f, 0); |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11690 |
12189 | 11691 /* Calculate the base and minimum sizes. |
11692 | |
11693 (When we use the X toolkit, we don't do it here. | |
11694 Instead we copy the values that the widgets are using, below.) */ | |
11695 #ifndef USE_X_TOOLKIT | |
976
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
11696 { |
1127
cd3d59155bf7
* xterm.c (x_wm_set_size_hint): Set the base_width and base_height
Jim Blandy <jimb@redhat.com>
parents:
1077
diff
changeset
|
11697 int base_width, base_height; |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11698 int min_rows = 0, min_cols = 0; |
1127
cd3d59155bf7
* xterm.c (x_wm_set_size_hint): Set the base_width and base_height
Jim Blandy <jimb@redhat.com>
parents:
1077
diff
changeset
|
11699 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
11700 base_width = CHAR_TO_PIXEL_WIDTH (f, 0); |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
11701 base_height = CHAR_TO_PIXEL_HEIGHT (f, 0); |
1127
cd3d59155bf7
* xterm.c (x_wm_set_size_hint): Set the base_width and base_height
Jim Blandy <jimb@redhat.com>
parents:
1077
diff
changeset
|
11702 |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11703 check_frame_size (f, &min_rows, &min_cols); |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11704 |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11705 /* The window manager uses the base width hints to calculate the |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11706 current number of rows and columns in the frame while |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11707 resizing; min_width and min_height aren't useful for this |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11708 purpose, since they might not give the dimensions for a |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11709 zero-row, zero-column frame. |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
11710 |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11711 We use the base_width and base_height members if we have |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11712 them; otherwise, we set the min_width and min_height members |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11713 to the size for a zero x zero frame. */ |
1127
cd3d59155bf7
* xterm.c (x_wm_set_size_hint): Set the base_width and base_height
Jim Blandy <jimb@redhat.com>
parents:
1077
diff
changeset
|
11714 |
cd3d59155bf7
* xterm.c (x_wm_set_size_hint): Set the base_width and base_height
Jim Blandy <jimb@redhat.com>
parents:
1077
diff
changeset
|
11715 #ifdef HAVE_X11R4 |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11716 size_hints.flags |= PBaseSize; |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11717 size_hints.base_width = base_width; |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11718 size_hints.base_height = base_height; |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11719 size_hints.min_width = base_width + min_cols * size_hints.width_inc; |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11720 size_hints.min_height = base_height + min_rows * size_hints.height_inc; |
1127
cd3d59155bf7
* xterm.c (x_wm_set_size_hint): Set the base_width and base_height
Jim Blandy <jimb@redhat.com>
parents:
1077
diff
changeset
|
11721 #else |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11722 size_hints.min_width = base_width; |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11723 size_hints.min_height = base_height; |
1127
cd3d59155bf7
* xterm.c (x_wm_set_size_hint): Set the base_width and base_height
Jim Blandy <jimb@redhat.com>
parents:
1077
diff
changeset
|
11724 #endif |
976
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
11725 } |
286 | 11726 |
12189 | 11727 /* If we don't need the old flags, we don't need the old hint at all. */ |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11728 if (flags) |
286 | 11729 { |
12189 | 11730 size_hints.flags |= flags; |
11731 goto no_read; | |
11732 } | |
11733 #endif /* not USE_X_TOOLKIT */ | |
11734 | |
11735 { | |
11736 XSizeHints hints; /* Sometimes I hate X Windows... */ | |
11737 long supplied_return; | |
11738 int value; | |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11739 |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11740 #ifdef HAVE_X11R4 |
12189 | 11741 value = XGetWMNormalHints (FRAME_X_DISPLAY (f), window, &hints, |
11742 &supplied_return); | |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11743 #else |
12189 | 11744 value = XGetNormalHints (FRAME_X_DISPLAY (f), window, &hints); |
11745 #endif | |
11746 | |
11747 #ifdef USE_X_TOOLKIT | |
11748 size_hints.base_height = hints.base_height; | |
11749 size_hints.base_width = hints.base_width; | |
11750 size_hints.min_height = hints.min_height; | |
11751 size_hints.min_width = hints.min_width; | |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11752 #endif |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
11753 |
12189 | 11754 if (flags) |
11755 size_hints.flags |= flags; | |
11756 else | |
11757 { | |
11758 if (value == 0) | |
11759 hints.flags = 0; | |
11760 if (hints.flags & PSize) | |
11761 size_hints.flags |= PSize; | |
11762 if (hints.flags & PPosition) | |
11763 size_hints.flags |= PPosition; | |
11764 if (hints.flags & USPosition) | |
11765 size_hints.flags |= USPosition; | |
11766 if (hints.flags & USSize) | |
11767 size_hints.flags |= USSize; | |
11768 } | |
11769 } | |
11770 | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11771 #ifndef USE_X_TOOLKIT |
12189 | 11772 no_read: |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11773 #endif |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11774 |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11775 #ifdef PWinGravity |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11776 size_hints.win_gravity = f->output_data.x->win_gravity; |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11777 size_hints.flags |= PWinGravity; |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11778 |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11779 if (user_position) |
4630
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
11780 { |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11781 size_hints.flags &= ~ PPosition; |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11782 size_hints.flags |= USPosition; |
4630
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
11783 } |
4777
21ed9c9bb210
(w_wn_set_size_hint): Make recent window gravity addition
Brian Fox <bfox@gnu.org>
parents:
4696
diff
changeset
|
11784 #endif /* PWinGravity */ |
4630
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
11785 |
1127
cd3d59155bf7
* xterm.c (x_wm_set_size_hint): Set the base_width and base_height
Jim Blandy <jimb@redhat.com>
parents:
1077
diff
changeset
|
11786 #ifdef HAVE_X11R4 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11787 XSetWMNormalHints (FRAME_X_DISPLAY (f), window, &size_hints); |
1127
cd3d59155bf7
* xterm.c (x_wm_set_size_hint): Set the base_width and base_height
Jim Blandy <jimb@redhat.com>
parents:
1077
diff
changeset
|
11788 #else |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11789 XSetNormalHints (FRAME_X_DISPLAY (f), window, &size_hints); |
1127
cd3d59155bf7
* xterm.c (x_wm_set_size_hint): Set the base_width and base_height
Jim Blandy <jimb@redhat.com>
parents:
1077
diff
changeset
|
11790 #endif |
286 | 11791 } |
11792 | |
11793 /* Used for IconicState or NormalState */ | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11794 |
21514 | 11795 void |
771 | 11796 x_wm_set_window_state (f, state) |
11797 struct frame *f; | |
286 | 11798 int state; |
11799 { | |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11800 #ifdef USE_X_TOOLKIT |
7602
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11801 Arg al[1]; |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11802 |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11803 XtSetArg (al[0], XtNinitialState, state); |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11804 XtSetValues (f->output_data.x->widget, al, 1); |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11805 #else /* not USE_X_TOOLKIT */ |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
11806 Window window = FRAME_X_WINDOW (f); |
286 | 11807 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11808 f->output_data.x->wm_hints.flags |= StateHint; |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11809 f->output_data.x->wm_hints.initial_state = state; |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11810 |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11811 XSetWMHints (FRAME_X_DISPLAY (f), window, &f->output_data.x->wm_hints); |
7602
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11812 #endif /* not USE_X_TOOLKIT */ |
286 | 11813 } |
11814 | |
21514 | 11815 void |
9542
f8b7a65a94bc
(x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents:
9537
diff
changeset
|
11816 x_wm_set_icon_pixmap (f, pixmap_id) |
771 | 11817 struct frame *f; |
9542
f8b7a65a94bc
(x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents:
9537
diff
changeset
|
11818 int pixmap_id; |
286 | 11819 { |
15117
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
11820 Pixmap icon_pixmap; |
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
11821 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11822 #ifndef USE_X_TOOLKIT |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
11823 Window window = FRAME_X_WINDOW (f); |
7806
ef7a60d59543
(x_wm_set_icon_position, x_wm_set_icon_pixmap):
Richard M. Stallman <rms@gnu.org>
parents:
7801
diff
changeset
|
11824 #endif |
286 | 11825 |
9542
f8b7a65a94bc
(x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents:
9537
diff
changeset
|
11826 if (pixmap_id > 0) |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11827 { |
15117
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
11828 icon_pixmap = x_bitmap_pixmap (f, pixmap_id); |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11829 f->output_data.x->wm_hints.icon_pixmap = icon_pixmap; |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11830 } |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11831 else |
12966
ce60b1a64399
(x_wm_set_icon_pixmap): If trying to turn off icon pixmap, do nothing.
Richard M. Stallman <rms@gnu.org>
parents:
12771
diff
changeset
|
11832 { |
ce60b1a64399
(x_wm_set_icon_pixmap): If trying to turn off icon pixmap, do nothing.
Richard M. Stallman <rms@gnu.org>
parents:
12771
diff
changeset
|
11833 /* It seems there is no way to turn off use of an icon pixmap. |
ce60b1a64399
(x_wm_set_icon_pixmap): If trying to turn off icon pixmap, do nothing.
Richard M. Stallman <rms@gnu.org>
parents:
12771
diff
changeset
|
11834 The following line does it, only if no icon has yet been created, |
ce60b1a64399
(x_wm_set_icon_pixmap): If trying to turn off icon pixmap, do nothing.
Richard M. Stallman <rms@gnu.org>
parents:
12771
diff
changeset
|
11835 for some window managers. But with mwm it crashes. |
ce60b1a64399
(x_wm_set_icon_pixmap): If trying to turn off icon pixmap, do nothing.
Richard M. Stallman <rms@gnu.org>
parents:
12771
diff
changeset
|
11836 Some people say it should clear the IconPixmapHint bit in this case, |
ce60b1a64399
(x_wm_set_icon_pixmap): If trying to turn off icon pixmap, do nothing.
Richard M. Stallman <rms@gnu.org>
parents:
12771
diff
changeset
|
11837 but that doesn't work, and the X consortium said it isn't the |
ce60b1a64399
(x_wm_set_icon_pixmap): If trying to turn off icon pixmap, do nothing.
Richard M. Stallman <rms@gnu.org>
parents:
12771
diff
changeset
|
11838 right thing at all. Since there is no way to win, |
ce60b1a64399
(x_wm_set_icon_pixmap): If trying to turn off icon pixmap, do nothing.
Richard M. Stallman <rms@gnu.org>
parents:
12771
diff
changeset
|
11839 best to explicitly give up. */ |
ce60b1a64399
(x_wm_set_icon_pixmap): If trying to turn off icon pixmap, do nothing.
Richard M. Stallman <rms@gnu.org>
parents:
12771
diff
changeset
|
11840 #if 0 |
ce60b1a64399
(x_wm_set_icon_pixmap): If trying to turn off icon pixmap, do nothing.
Richard M. Stallman <rms@gnu.org>
parents:
12771
diff
changeset
|
11841 f->output_data.x->wm_hints.icon_pixmap = None; |
ce60b1a64399
(x_wm_set_icon_pixmap): If trying to turn off icon pixmap, do nothing.
Richard M. Stallman <rms@gnu.org>
parents:
12771
diff
changeset
|
11842 #else |
ce60b1a64399
(x_wm_set_icon_pixmap): If trying to turn off icon pixmap, do nothing.
Richard M. Stallman <rms@gnu.org>
parents:
12771
diff
changeset
|
11843 return; |
ce60b1a64399
(x_wm_set_icon_pixmap): If trying to turn off icon pixmap, do nothing.
Richard M. Stallman <rms@gnu.org>
parents:
12771
diff
changeset
|
11844 #endif |
ce60b1a64399
(x_wm_set_icon_pixmap): If trying to turn off icon pixmap, do nothing.
Richard M. Stallman <rms@gnu.org>
parents:
12771
diff
changeset
|
11845 } |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11846 |
15117
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
11847 #ifdef USE_X_TOOLKIT /* same as in x_wm_set_window_state. */ |
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
11848 |
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
11849 { |
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
11850 Arg al[1]; |
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
11851 XtSetArg (al[0], XtNiconPixmap, icon_pixmap); |
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
11852 XtSetValues (f->output_data.x->widget, al, 1); |
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
11853 } |
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
11854 |
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
11855 #else /* not USE_X_TOOLKIT */ |
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
11856 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11857 f->output_data.x->wm_hints.flags |= IconPixmapHint; |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11858 XSetWMHints (FRAME_X_DISPLAY (f), window, &f->output_data.x->wm_hints); |
15117
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
11859 |
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
11860 #endif /* not USE_X_TOOLKIT */ |
286 | 11861 } |
11862 | |
21514 | 11863 void |
771 | 11864 x_wm_set_icon_position (f, icon_x, icon_y) |
11865 struct frame *f; | |
286 | 11866 int icon_x, icon_y; |
11867 { | |
7806
ef7a60d59543
(x_wm_set_icon_position, x_wm_set_icon_pixmap):
Richard M. Stallman <rms@gnu.org>
parents:
7801
diff
changeset
|
11868 #ifdef USE_X_TOOLKIT |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11869 Window window = XtWindow (f->output_data.x->widget); |
7806
ef7a60d59543
(x_wm_set_icon_position, x_wm_set_icon_pixmap):
Richard M. Stallman <rms@gnu.org>
parents:
7801
diff
changeset
|
11870 #else |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
11871 Window window = FRAME_X_WINDOW (f); |
7806
ef7a60d59543
(x_wm_set_icon_position, x_wm_set_icon_pixmap):
Richard M. Stallman <rms@gnu.org>
parents:
7801
diff
changeset
|
11872 #endif |
286 | 11873 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11874 f->output_data.x->wm_hints.flags |= IconPositionHint; |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11875 f->output_data.x->wm_hints.icon_x = icon_x; |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11876 f->output_data.x->wm_hints.icon_y = icon_y; |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11877 |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11878 XSetWMHints (FRAME_X_DISPLAY (f), window, &f->output_data.x->wm_hints); |
286 | 11879 } |
11880 | |
11881 | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11882 /*********************************************************************** |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11883 Fonts |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11884 ***********************************************************************/ |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11885 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11886 /* Return a pointer to struct font_info of font FONT_IDX of frame F. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11887 |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11888 struct font_info * |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11889 x_get_font_info (f, font_idx) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11890 FRAME_PTR f; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11891 int font_idx; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11892 { |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11893 return (FRAME_X_FONT_TABLE (f) + font_idx); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11894 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11895 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11896 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11897 /* Return a list of names of available fonts matching PATTERN on frame |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11898 F. If SIZE is not 0, it is the size (maximum bound width) of fonts |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11899 to be listed. Frame F NULL means we have not yet created any |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11900 frame on X, and consult the first display in x_display_list. |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11901 MAXNAMES sets a limit on how many fonts to match. */ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11902 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11903 Lisp_Object |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11904 x_list_fonts (f, pattern, size, maxnames) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11905 FRAME_PTR f; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11906 Lisp_Object pattern; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11907 int size; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11908 int maxnames; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11909 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11910 Lisp_Object list = Qnil, patterns, newlist = Qnil, key = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11911 Lisp_Object tem, second_best; |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11912 Display *dpy = f != NULL ? FRAME_X_DISPLAY (f) : x_display_list->display; |
22503
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
11913 int try_XLoadQueryFont = 0; |
24633
c7d905dca6ba
(x_list_fonts): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents:
24618
diff
changeset
|
11914 int count; |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11915 |
19447
34099ec680df
(x_list_fonts): Adjusted for the name change of
Kenichi Handa <handa@m17n.org>
parents:
19276
diff
changeset
|
11916 patterns = Fassoc (pattern, Valternate_fontname_alist); |
18347
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
11917 if (NILP (patterns)) |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
11918 patterns = Fcons (pattern, Qnil); |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
11919 |
22503
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
11920 if (maxnames == 1 && !size) |
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
11921 /* We can return any single font matching PATTERN. */ |
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
11922 try_XLoadQueryFont = 1; |
19062
9cc02044117d
(x_list_fonts): Request at least 10 fonts by XListFonts.
Kenichi Handa <handa@m17n.org>
parents:
19060
diff
changeset
|
11923 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
11924 for (; CONSP (patterns); patterns = XCDR (patterns)) |
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
11925 { |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11926 int num_fonts; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11927 char **names; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11928 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
11929 pattern = XCAR (patterns); |
19060
7b362a9bf8e9
(x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents:
19027
diff
changeset
|
11930 /* See if we cached the result for this particular query. |
7b362a9bf8e9
(x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents:
19027
diff
changeset
|
11931 The cache is an alist of the form: |
7b362a9bf8e9
(x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents:
19027
diff
changeset
|
11932 (((PATTERN . MAXNAMES) (FONTNAME . WIDTH) ...) ...) |
7b362a9bf8e9
(x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents:
19027
diff
changeset
|
11933 */ |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
11934 if (f && (tem = XCDR (FRAME_X_DISPLAY_INFO (f)->name_list_element), |
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
11935 key = Fcons (pattern, make_number (maxnames)), |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
11936 !NILP (list = Fassoc (key, tem)))) |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
11937 { |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
11938 list = Fcdr_safe (list); |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
11939 /* We have a cashed list. Don't have to get the list again. */ |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
11940 goto label_cached; |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
11941 } |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
11942 |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
11943 /* At first, put PATTERN in the cache. */ |
22503
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
11944 |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11945 BLOCK_INPUT; |
24618
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
11946 count = x_catch_errors (dpy); |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
11947 |
22503
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
11948 if (try_XLoadQueryFont) |
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
11949 { |
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
11950 XFontStruct *font; |
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
11951 unsigned long value; |
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
11952 |
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
11953 font = XLoadQueryFont (dpy, XSTRING (pattern)->data); |
24618
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
11954 if (x_had_errors_p (dpy)) |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
11955 { |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
11956 /* This error is perhaps due to insufficient memory on X |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
11957 server. Let's just ignore it. */ |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
11958 font = NULL; |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
11959 x_clear_errors (dpy); |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
11960 } |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
11961 |
22503
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
11962 if (font |
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
11963 && XGetFontProperty (font, XA_FONT, &value)) |
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
11964 { |
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
11965 char *name = (char *) XGetAtomName (dpy, (Atom) value); |
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
11966 int len = strlen (name); |
22530
6d2e22a16952
(x_list_fonts): Keep alloca usage simple.
Karl Heuer <kwzh@gnu.org>
parents:
22522
diff
changeset
|
11967 char *tmp; |
22503
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
11968 |
23095
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
11969 /* If DXPC (a Differential X Protocol Compressor) |
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
11970 Ver.3.7 is running, XGetAtomName will return null |
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
11971 string. We must avoid such a name. */ |
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
11972 if (len == 0) |
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
11973 try_XLoadQueryFont = 0; |
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
11974 else |
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
11975 { |
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
11976 num_fonts = 1; |
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
11977 names = (char **) alloca (sizeof (char *)); |
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
11978 /* Some systems only allow alloca assigned to a |
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
11979 simple var. */ |
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
11980 tmp = (char *) alloca (len + 1); names[0] = tmp; |
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
11981 bcopy (name, names[0], len + 1); |
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
11982 XFree (name); |
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
11983 } |
22503
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
11984 } |
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
11985 else |
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
11986 try_XLoadQueryFont = 0; |
22943
5493321d4526
(x_list_fonts): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
22907
diff
changeset
|
11987 |
5493321d4526
(x_list_fonts): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
22907
diff
changeset
|
11988 if (font) |
5493321d4526
(x_list_fonts): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
22907
diff
changeset
|
11989 XFreeFont (dpy, font); |
22503
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
11990 } |
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
11991 |
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
11992 if (!try_XLoadQueryFont) |
24618
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
11993 { |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
11994 /* We try at least 10 fonts because XListFonts will return |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
11995 auto-scaled fonts at the head. */ |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
11996 names = XListFonts (dpy, XSTRING (pattern)->data, max (maxnames, 10), |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
11997 &num_fonts); |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
11998 if (x_had_errors_p (dpy)) |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
11999 { |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12000 /* This error is perhaps due to insufficient memory on X |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12001 server. Let's just ignore it. */ |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12002 names = NULL; |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12003 x_clear_errors (dpy); |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12004 } |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12005 } |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12006 |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12007 x_uncatch_errors (dpy, count); |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12008 UNBLOCK_INPUT; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12009 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12010 if (names) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12011 { |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12012 int i; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12013 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12014 /* Make a list of all the fonts we got back. |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12015 Store that in the font cache for the display. */ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12016 for (i = 0; i < num_fonts; i++) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12017 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12018 int width = 0; |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12019 char *p = names[i]; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12020 int average_width = -1, dashes = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12021 |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12022 /* Count the number of dashes in NAMES[I]. If there are |
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12023 14 dashes, and the field value following 12th dash |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12024 (AVERAGE_WIDTH) is 0, this is a auto-scaled font which |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12025 is usually too ugly to be used for editing. Let's |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12026 ignore it. */ |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12027 while (*p) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12028 if (*p++ == '-') |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12029 { |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12030 dashes++; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12031 if (dashes == 7) /* PIXEL_SIZE field */ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12032 width = atoi (p); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12033 else if (dashes == 12) /* AVERAGE_WIDTH field */ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12034 average_width = atoi (p); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12035 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12036 if (dashes < 14 || average_width != 0) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12037 { |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12038 tem = build_string (names[i]); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12039 if (NILP (Fassoc (tem, list))) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12040 { |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12041 if (STRINGP (Vx_pixel_size_width_font_regexp) |
18191
3c353983bba9
(x_list_fonts): fast_c_string_match_ignore_case renamed.
Richard M. Stallman <rms@gnu.org>
parents:
18188
diff
changeset
|
12042 && ((fast_c_string_match_ignore_case |
3c353983bba9
(x_list_fonts): fast_c_string_match_ignore_case renamed.
Richard M. Stallman <rms@gnu.org>
parents:
18188
diff
changeset
|
12043 (Vx_pixel_size_width_font_regexp, names[i])) |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12044 >= 0)) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12045 /* We can set the value of PIXEL_SIZE to the |
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12046 width of this font. */ |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12047 list = Fcons (Fcons (tem, make_number (width)), list); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12048 else |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12049 /* For the moment, width is not known. */ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12050 list = Fcons (Fcons (tem, Qnil), list); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12051 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12052 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12053 } |
22503
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
12054 if (!try_XLoadQueryFont) |
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
12055 XFreeFontNames (names); |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12056 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12057 |
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12058 /* Now store the result in the cache. */ |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12059 if (f != NULL) |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12060 XCDR (FRAME_X_DISPLAY_INFO (f)->name_list_element) |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12061 = Fcons (Fcons (key, list), |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12062 XCDR (FRAME_X_DISPLAY_INFO (f)->name_list_element)); |
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12063 |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12064 label_cached: |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12065 if (NILP (list)) continue; /* Try the remaining alternatives. */ |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12066 |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12067 newlist = second_best = Qnil; |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12068 /* Make a list of the fonts that have the right width. */ |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12069 for (; CONSP (list); list = XCDR (list)) |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12070 { |
19060
7b362a9bf8e9
(x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents:
19027
diff
changeset
|
12071 int found_size; |
7b362a9bf8e9
(x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents:
19027
diff
changeset
|
12072 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12073 tem = XCAR (list); |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12074 |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12075 if (!CONSP (tem) || NILP (XCAR (tem))) |
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12076 continue; |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12077 if (!size) |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12078 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12079 newlist = Fcons (XCAR (tem), newlist); |
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12080 continue; |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12081 } |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12082 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12083 if (!INTEGERP (XCDR (tem))) |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12084 { |
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12085 /* Since we have not yet known the size of this font, we |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12086 must try slow function call XLoadQueryFont. */ |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12087 XFontStruct *thisinfo; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12088 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12089 BLOCK_INPUT; |
24618
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12090 count = x_catch_errors (dpy); |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12091 thisinfo = XLoadQueryFont (dpy, |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12092 XSTRING (XCAR (tem))->data); |
24618
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12093 if (x_had_errors_p (dpy)) |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12094 { |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12095 /* This error is perhaps due to insufficient memory on X |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12096 server. Let's just ignore it. */ |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12097 thisinfo = NULL; |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12098 x_clear_errors (dpy); |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12099 } |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12100 x_uncatch_errors (dpy, count); |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12101 UNBLOCK_INPUT; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12102 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12103 if (thisinfo) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12104 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12105 XCDR (tem) |
19060
7b362a9bf8e9
(x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents:
19027
diff
changeset
|
12106 = (thisinfo->min_bounds.width == 0 |
7b362a9bf8e9
(x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents:
19027
diff
changeset
|
12107 ? make_number (0) |
7b362a9bf8e9
(x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents:
19027
diff
changeset
|
12108 : make_number (thisinfo->max_bounds.width)); |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12109 XFreeFont (dpy, thisinfo); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12110 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12111 else |
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12112 /* For unknown reason, the previous call of XListFont had |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12113 returned a font which can't be opened. Record the size |
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12114 as 0 not to try to open it again. */ |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12115 XCDR (tem) = make_number (0); |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12116 } |
19060
7b362a9bf8e9
(x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents:
19027
diff
changeset
|
12117 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12118 found_size = XINT (XCDR (tem)); |
19060
7b362a9bf8e9
(x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents:
19027
diff
changeset
|
12119 if (found_size == size) |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12120 newlist = Fcons (XCAR (tem), newlist); |
19060
7b362a9bf8e9
(x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents:
19027
diff
changeset
|
12121 else if (found_size > 0) |
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12122 { |
19060
7b362a9bf8e9
(x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents:
19027
diff
changeset
|
12123 if (NILP (second_best)) |
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12124 second_best = tem; |
19060
7b362a9bf8e9
(x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents:
19027
diff
changeset
|
12125 else if (found_size < size) |
7b362a9bf8e9
(x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents:
19027
diff
changeset
|
12126 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12127 if (XINT (XCDR (second_best)) > size |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12128 || XINT (XCDR (second_best)) < found_size) |
19060
7b362a9bf8e9
(x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents:
19027
diff
changeset
|
12129 second_best = tem; |
7b362a9bf8e9
(x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents:
19027
diff
changeset
|
12130 } |
7b362a9bf8e9
(x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents:
19027
diff
changeset
|
12131 else |
7b362a9bf8e9
(x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents:
19027
diff
changeset
|
12132 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12133 if (XINT (XCDR (second_best)) > size |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12134 && XINT (XCDR (second_best)) > found_size) |
19060
7b362a9bf8e9
(x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents:
19027
diff
changeset
|
12135 second_best = tem; |
7b362a9bf8e9
(x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents:
19027
diff
changeset
|
12136 } |
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12137 } |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12138 } |
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12139 if (!NILP (newlist)) |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12140 break; |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12141 else if (!NILP (second_best)) |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12142 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12143 newlist = Fcons (XCAR (second_best), Qnil); |
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12144 break; |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12145 } |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12146 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12147 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12148 return newlist; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12149 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12150 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12151 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12152 #if GLYPH_DEBUG |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12153 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12154 /* Check that FONT is valid on frame F. It is if it can be found in F's |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12155 font table. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12156 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12157 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12158 x_check_font (f, font) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12159 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12160 XFontStruct *font; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12161 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12162 int i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12163 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12164 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12165 xassert (font != NULL); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12166 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12167 for (i = 0; i < dpyinfo->n_fonts; i++) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12168 if (dpyinfo->font_table[i].name |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12169 && font == dpyinfo->font_table[i].font) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12170 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12171 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12172 xassert (i < dpyinfo->n_fonts); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12173 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12174 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12175 #endif /* GLYPH_DEBUG != 0 */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12176 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12177 /* Set *W to the minimum width, *H to the minimum font height of FONT. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12178 Note: There are (broken) X fonts out there with invalid XFontStruct |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12179 min_bounds contents. For example, handa@etl.go.jp reports that |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12180 "-adobe-courier-medium-r-normal--*-180-*-*-m-*-iso8859-1" fonts |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12181 have font->min_bounds.width == 0. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12182 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12183 static INLINE void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12184 x_font_min_bounds (font, w, h) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12185 XFontStruct *font; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12186 int *w, *h; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12187 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12188 *h = FONT_HEIGHT (font); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12189 *w = font->min_bounds.width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12190 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12191 /* Try to handle the case where FONT->min_bounds has invalid |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12192 contents. Since the only font known to have invalid min_bounds |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12193 is fixed-width, use max_bounds if min_bounds seems to be invalid. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12194 if (*w <= 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12195 *w = font->max_bounds.width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12196 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12197 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12198 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12199 /* Compute the smallest character width and smallest font height over |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12200 all fonts available on frame F. Set the members smallest_char_width |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12201 and smallest_font_height in F's x_display_info structure to |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12202 the values computed. Value is non-zero if smallest_font_height or |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12203 smallest_char_width become smaller than they were before. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12204 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12205 static int |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12206 x_compute_min_glyph_bounds (f) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12207 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12208 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12209 int i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12210 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12211 XFontStruct *font; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12212 int old_width = dpyinfo->smallest_char_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12213 int old_height = dpyinfo->smallest_font_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12214 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12215 dpyinfo->smallest_font_height = 100000; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12216 dpyinfo->smallest_char_width = 100000; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12217 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12218 for (i = 0; i < dpyinfo->n_fonts; ++i) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12219 if (dpyinfo->font_table[i].name) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12220 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12221 struct font_info *fontp = dpyinfo->font_table + i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12222 int w, h; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12223 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12224 font = (XFontStruct *) fontp->font; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12225 xassert (font != (XFontStruct *) ~0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12226 x_font_min_bounds (font, &w, &h); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12227 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12228 dpyinfo->smallest_font_height = min (dpyinfo->smallest_font_height, h); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12229 dpyinfo->smallest_char_width = min (dpyinfo->smallest_char_width, w); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12230 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12231 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12232 xassert (dpyinfo->smallest_char_width > 0 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12233 && dpyinfo->smallest_font_height > 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12234 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12235 return (dpyinfo->n_fonts == 1 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12236 || dpyinfo->smallest_char_width < old_width |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12237 || dpyinfo->smallest_font_height < old_height); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12238 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12239 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12240 |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12241 /* Load font named FONTNAME of the size SIZE for frame F, and return a |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12242 pointer to the structure font_info while allocating it dynamically. |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12243 If SIZE is 0, load any size of font. |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12244 If loading is failed, return NULL. */ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12245 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12246 struct font_info * |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12247 x_load_font (f, fontname, size) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12248 struct frame *f; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12249 register char *fontname; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12250 int size; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12251 { |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12252 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12253 Lisp_Object font_names; |
24484
d4ee4399e999
(x_list_fonts): Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24224
diff
changeset
|
12254 int count; |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12255 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12256 /* Get a list of all the fonts that match this name. Once we |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12257 have a list of matching fonts, we compare them against the fonts |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12258 we already have by comparing names. */ |
22503
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
12259 font_names = x_list_fonts (f, build_string (fontname), size, 1); |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12260 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12261 if (!NILP (font_names)) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12262 { |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12263 Lisp_Object tail; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12264 int i; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12265 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12266 for (i = 0; i < dpyinfo->n_fonts; i++) |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12267 for (tail = font_names; CONSP (tail); tail = XCDR (tail)) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12268 if (dpyinfo->font_table[i].name |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12269 && (!strcmp (dpyinfo->font_table[i].name, |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12270 XSTRING (XCAR (tail))->data) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12271 || !strcmp (dpyinfo->font_table[i].full_name, |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12272 XSTRING (XCAR (tail))->data))) |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12273 return (dpyinfo->font_table + i); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12274 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12275 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12276 /* Load the font and add it to the table. */ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12277 { |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12278 char *full_name; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12279 XFontStruct *font; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12280 struct font_info *fontp; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12281 unsigned long value; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12282 int i; |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12283 |
18347
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12284 /* If we have found fonts by x_list_font, load one of them. If |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12285 not, we still try to load a font by the name given as FONTNAME |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12286 because XListFonts (called in x_list_font) of some X server has |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12287 a bug of not finding a font even if the font surely exists and |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12288 is loadable by XLoadQueryFont. */ |
23162
b36799069143
(x_load_font): If SIZE is 0, don't use a name x_list_font returns.
Kenichi Handa <handa@m17n.org>
parents:
23151
diff
changeset
|
12289 if (size > 0 && !NILP (font_names)) |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12290 fontname = (char *) XSTRING (XCAR (font_names))->data; |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12291 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12292 BLOCK_INPUT; |
24484
d4ee4399e999
(x_list_fonts): Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24224
diff
changeset
|
12293 count = x_catch_errors (FRAME_X_DISPLAY (f)); |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12294 font = (XFontStruct *) XLoadQueryFont (FRAME_X_DISPLAY (f), fontname); |
24484
d4ee4399e999
(x_list_fonts): Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24224
diff
changeset
|
12295 if (x_had_errors_p (FRAME_X_DISPLAY (f))) |
d4ee4399e999
(x_list_fonts): Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24224
diff
changeset
|
12296 { |
d4ee4399e999
(x_list_fonts): Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24224
diff
changeset
|
12297 /* This error is perhaps due to insufficient memory on X |
d4ee4399e999
(x_list_fonts): Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24224
diff
changeset
|
12298 server. Let's just ignore it. */ |
d4ee4399e999
(x_list_fonts): Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24224
diff
changeset
|
12299 font = NULL; |
d4ee4399e999
(x_list_fonts): Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24224
diff
changeset
|
12300 x_clear_errors (FRAME_X_DISPLAY (f)); |
d4ee4399e999
(x_list_fonts): Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24224
diff
changeset
|
12301 } |
d4ee4399e999
(x_list_fonts): Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24224
diff
changeset
|
12302 x_uncatch_errors (FRAME_X_DISPLAY (f), count); |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12303 UNBLOCK_INPUT; |
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12304 if (!font) |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12305 return NULL; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12306 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12307 /* Find a free slot in the font table. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12308 for (i = 0; i < dpyinfo->n_fonts; ++i) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12309 if (dpyinfo->font_table[i].name == NULL) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12310 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12311 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12312 /* If no free slot found, maybe enlarge the font table. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12313 if (i == dpyinfo->n_fonts |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12314 && dpyinfo->n_fonts == dpyinfo->font_table_size) |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12315 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12316 int sz; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12317 dpyinfo->font_table_size = max (16, 2 * dpyinfo->font_table_size); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12318 sz = dpyinfo->font_table_size * sizeof *dpyinfo->font_table; |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12319 dpyinfo->font_table |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12320 = (struct font_info *) xrealloc (dpyinfo->font_table, sz); |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12321 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12322 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12323 fontp = dpyinfo->font_table + i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12324 if (i == dpyinfo->n_fonts) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12325 ++dpyinfo->n_fonts; |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12326 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12327 /* Now fill in the slots of *FONTP. */ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12328 BLOCK_INPUT; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12329 fontp->font = font; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12330 fontp->font_idx = i; |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12331 fontp->name = (char *) xmalloc (strlen (fontname) + 1); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12332 bcopy (fontname, fontp->name, strlen (fontname) + 1); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12333 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12334 /* Try to get the full name of FONT. Put it in FULL_NAME. */ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12335 full_name = 0; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12336 if (XGetFontProperty (font, XA_FONT, &value)) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12337 { |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12338 char *name = (char *) XGetAtomName (FRAME_X_DISPLAY (f), (Atom) value); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12339 char *p = name; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12340 int dashes = 0; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12341 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12342 /* Count the number of dashes in the "full name". |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12343 If it is too few, this isn't really the font's full name, |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12344 so don't use it. |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12345 In X11R4, the fonts did not come with their canonical names |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12346 stored in them. */ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12347 while (*p) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12348 { |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12349 if (*p == '-') |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12350 dashes++; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12351 p++; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12352 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12353 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12354 if (dashes >= 13) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12355 { |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12356 full_name = (char *) xmalloc (p - name + 1); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12357 bcopy (name, full_name, p - name + 1); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12358 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12359 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12360 XFree (name); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12361 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12362 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12363 if (full_name != 0) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12364 fontp->full_name = full_name; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12365 else |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12366 fontp->full_name = fontp->name; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12367 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12368 fontp->size = font->max_bounds.width; |
24224
4001ff593a99
(x_load_font): For the height of font, if normarl ascent and
Kenichi Handa <handa@m17n.org>
parents:
24223
diff
changeset
|
12369 fontp->height = FONT_HEIGHT (font); |
4001ff593a99
(x_load_font): For the height of font, if normarl ascent and
Kenichi Handa <handa@m17n.org>
parents:
24223
diff
changeset
|
12370 { |
4001ff593a99
(x_load_font): For the height of font, if normarl ascent and
Kenichi Handa <handa@m17n.org>
parents:
24223
diff
changeset
|
12371 /* For some font, ascent and descent in max_bounds field is |
4001ff593a99
(x_load_font): For the height of font, if normarl ascent and
Kenichi Handa <handa@m17n.org>
parents:
24223
diff
changeset
|
12372 larger than the above value. */ |
4001ff593a99
(x_load_font): For the height of font, if normarl ascent and
Kenichi Handa <handa@m17n.org>
parents:
24223
diff
changeset
|
12373 int max_height = font->max_bounds.ascent + font->max_bounds.descent; |
4001ff593a99
(x_load_font): For the height of font, if normarl ascent and
Kenichi Handa <handa@m17n.org>
parents:
24223
diff
changeset
|
12374 if (max_height > fontp->height) |
24690
585a5e69e371
(x_load_font): Fix typo (`>' -> `=').
Kenichi Handa <handa@m17n.org>
parents:
24633
diff
changeset
|
12375 fontp->height = max_height; |
24224
4001ff593a99
(x_load_font): For the height of font, if normarl ascent and
Kenichi Handa <handa@m17n.org>
parents:
24223
diff
changeset
|
12376 } |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12377 |
18347
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12378 if (NILP (font_names)) |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12379 { |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12380 /* We come here because of a bug of XListFonts mentioned at |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12381 the head of this block. Let's store this information in |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12382 the cache for x_list_fonts. */ |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12383 Lisp_Object lispy_name = build_string (fontname); |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12384 Lisp_Object lispy_full_name = build_string (fontp->full_name); |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12385 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12386 XCDR (dpyinfo->name_list_element) |
18347
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12387 = Fcons (Fcons (Fcons (lispy_name, make_number (256)), |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12388 Fcons (Fcons (lispy_full_name, |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12389 make_number (fontp->size)), |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12390 Qnil)), |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12391 XCDR (dpyinfo->name_list_element)); |
18347
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12392 if (full_name) |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12393 XCDR (dpyinfo->name_list_element) |
18347
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12394 = Fcons (Fcons (Fcons (lispy_full_name, make_number (256)), |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12395 Fcons (Fcons (lispy_full_name, |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12396 make_number (fontp->size)), |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12397 Qnil)), |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12398 XCDR (dpyinfo->name_list_element)); |
18347
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12399 } |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12400 |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12401 /* The slot `encoding' specifies how to map a character |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12402 code-points (0x20..0x7F or 0x2020..0x7F7F) of each charset to |
17877
7841036d55f4
(x_load_font): Set 4 instead of -1 in fontp->encoding[1]
Kenichi Handa <handa@m17n.org>
parents:
17825
diff
changeset
|
12403 the font code-points (0:0x20..0x7F, 1:0xA0..0xFF, 0:0x2020..0x7F7F, |
18057
07e0112aa8f5
(x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents:
18008
diff
changeset
|
12404 the font code-points (0:0x20..0x7F, 1:0xA0..0xFF, |
07e0112aa8f5
(x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents:
18008
diff
changeset
|
12405 0:0x2020..0x7F7F, 1:0xA0A0..0xFFFF, 3:0x20A0..0x7FFF, or |
07e0112aa8f5
(x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents:
18008
diff
changeset
|
12406 2:0xA020..0xFF7F). For the moment, we don't know which charset |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12407 uses this font. So, we set information in fontp->encoding[1] |
18057
07e0112aa8f5
(x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents:
18008
diff
changeset
|
12408 which is never used by any charset. If mapping can't be |
07e0112aa8f5
(x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents:
18008
diff
changeset
|
12409 decided, set FONT_ENCODING_NOT_DECIDED. */ |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12410 fontp->encoding[1] |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12411 = (font->max_byte1 == 0 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12412 /* 1-byte font */ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12413 ? (font->min_char_or_byte2 < 0x80 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12414 ? (font->max_char_or_byte2 < 0x80 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12415 ? 0 /* 0x20..0x7F */ |
18057
07e0112aa8f5
(x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents:
18008
diff
changeset
|
12416 : FONT_ENCODING_NOT_DECIDED) /* 0x20..0xFF */ |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12417 : 1) /* 0xA0..0xFF */ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12418 /* 2-byte font */ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12419 : (font->min_byte1 < 0x80 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12420 ? (font->max_byte1 < 0x80 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12421 ? (font->min_char_or_byte2 < 0x80 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12422 ? (font->max_char_or_byte2 < 0x80 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12423 ? 0 /* 0x2020..0x7F7F */ |
18057
07e0112aa8f5
(x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents:
18008
diff
changeset
|
12424 : FONT_ENCODING_NOT_DECIDED) /* 0x2020..0x7FFF */ |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12425 : 3) /* 0x20A0..0x7FFF */ |
18057
07e0112aa8f5
(x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents:
18008
diff
changeset
|
12426 : FONT_ENCODING_NOT_DECIDED) /* 0x20??..0xA0?? */ |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12427 : (font->min_char_or_byte2 < 0x80 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12428 ? (font->max_char_or_byte2 < 0x80 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12429 ? 2 /* 0xA020..0xFF7F */ |
18057
07e0112aa8f5
(x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents:
18008
diff
changeset
|
12430 : FONT_ENCODING_NOT_DECIDED) /* 0xA020..0xFFFF */ |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12431 : 1))); /* 0xA0A0..0xFFFF */ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12432 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12433 fontp->baseline_offset |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12434 = (XGetFontProperty (font, dpyinfo->Xatom_MULE_BASELINE_OFFSET, &value) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12435 ? (long) value : 0); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12436 fontp->relative_compose |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12437 = (XGetFontProperty (font, dpyinfo->Xatom_MULE_RELATIVE_COMPOSE, &value) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12438 ? (long) value : 0); |
17103
7cde34a6424e
(dumpglyphs): Pay attention to characters registered in
Kenichi Handa <handa@m17n.org>
parents:
17050
diff
changeset
|
12439 fontp->default_ascent |
7cde34a6424e
(dumpglyphs): Pay attention to characters registered in
Kenichi Handa <handa@m17n.org>
parents:
17050
diff
changeset
|
12440 = (XGetFontProperty (font, dpyinfo->Xatom_MULE_DEFAULT_ASCENT, &value) |
7cde34a6424e
(dumpglyphs): Pay attention to characters registered in
Kenichi Handa <handa@m17n.org>
parents:
17050
diff
changeset
|
12441 ? (long) value : 0); |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12442 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12443 /* Set global flag fonts_changed_p to non-zero if the font loaded |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12444 has a character with a smaller width than any other character |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12445 before, or if the font loaded has a smalle>r height than any |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12446 other font loaded before. If this happens, it will make a |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12447 glyph matrix reallocation necessary. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12448 fonts_changed_p = x_compute_min_glyph_bounds (f); |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12449 UNBLOCK_INPUT; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12450 return fontp; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12451 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12452 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12453 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12454 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12455 /* Return a pointer to struct font_info of a font named FONTNAME for |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12456 frame F. If no such font is loaded, return NULL. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12457 |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12458 struct font_info * |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12459 x_query_font (f, fontname) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12460 struct frame *f; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12461 register char *fontname; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12462 { |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12463 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12464 int i; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12465 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12466 for (i = 0; i < dpyinfo->n_fonts; i++) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12467 if (dpyinfo->font_table[i].name |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12468 && (!strcmp (dpyinfo->font_table[i].name, fontname) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12469 || !strcmp (dpyinfo->font_table[i].full_name, fontname))) |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12470 return (dpyinfo->font_table + i); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12471 return NULL; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12472 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12473 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12474 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12475 /* Find a CCL program for a font specified by FONTP, and set the member |
21548
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
12476 `encoder' of the structure. */ |
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
12477 |
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
12478 void |
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
12479 x_find_ccl_program (fontp) |
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
12480 struct font_info *fontp; |
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
12481 { |
25068
0d081383b5b8
(x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24991
diff
changeset
|
12482 Lisp_Object list, elt; |
21548
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
12483 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12484 for (list = Vfont_ccl_encoder_alist; CONSP (list); list = XCDR (list)) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12485 { |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12486 elt = XCAR (list); |
21548
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
12487 if (CONSP (elt) |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12488 && STRINGP (XCAR (elt)) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12489 && (fast_c_string_match_ignore_case (XCAR (elt), fontp->name) |
21548
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
12490 >= 0)) |
25068
0d081383b5b8
(x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24991
diff
changeset
|
12491 break; |
0d081383b5b8
(x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24991
diff
changeset
|
12492 } |
0d081383b5b8
(x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24991
diff
changeset
|
12493 if (! NILP (list)) |
0d081383b5b8
(x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24991
diff
changeset
|
12494 { |
25085
23813e3a69b8
(x_find_ccl_program): Add casting.
Kenichi Handa <handa@m17n.org>
parents:
25083
diff
changeset
|
12495 struct ccl_program *ccl |
23813e3a69b8
(x_find_ccl_program): Add casting.
Kenichi Handa <handa@m17n.org>
parents:
25083
diff
changeset
|
12496 = (struct ccl_program *) xmalloc (sizeof (struct ccl_program)); |
25068
0d081383b5b8
(x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24991
diff
changeset
|
12497 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12498 if (setup_ccl_program (ccl, XCDR (elt)) < 0) |
25068
0d081383b5b8
(x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24991
diff
changeset
|
12499 xfree (ccl); |
0d081383b5b8
(x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24991
diff
changeset
|
12500 else |
0d081383b5b8
(x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24991
diff
changeset
|
12501 fontp->font_encoder = ccl; |
21548
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
12502 } |
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
12503 } |
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
12504 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12505 |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12506 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12507 /*********************************************************************** |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12508 Initialization |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12509 ***********************************************************************/ |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
12510 |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12511 #ifdef USE_X_TOOLKIT |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12512 static XrmOptionDescRec emacs_options[] = { |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12513 {"-geometry", ".geometry", XrmoptionSepArg, NULL}, |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12514 {"-iconic", ".iconic", XrmoptionNoArg, (XtPointer) "yes"}, |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12515 |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12516 {"-internal-border-width", "*EmacsScreen.internalBorderWidth", |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12517 XrmoptionSepArg, NULL}, |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12518 {"-ib", "*EmacsScreen.internalBorderWidth", XrmoptionSepArg, NULL}, |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12519 |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12520 {"-T", "*EmacsShell.title", XrmoptionSepArg, (XtPointer) NULL}, |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12521 {"-wn", "*EmacsShell.title", XrmoptionSepArg, (XtPointer) NULL}, |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12522 {"-title", "*EmacsShell.title", XrmoptionSepArg, (XtPointer) NULL}, |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12523 {"-iconname", "*EmacsShell.iconName", XrmoptionSepArg, (XtPointer) NULL}, |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12524 {"-in", "*EmacsShell.iconName", XrmoptionSepArg, (XtPointer) NULL}, |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12525 {"-mc", "*pointerColor", XrmoptionSepArg, (XtPointer) NULL}, |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12526 {"-cr", "*cursorColor", XrmoptionSepArg, (XtPointer) NULL} |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12527 }; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12528 #endif /* USE_X_TOOLKIT */ |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12529 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12530 static int x_initialized; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12531 |
11015 | 12532 #ifdef MULTI_KBOARD |
12533 /* Test whether two display-name strings agree up to the dot that separates | |
12534 the screen number from the server number. */ | |
12535 static int | |
12536 same_x_server (name1, name2) | |
12537 char *name1, *name2; | |
12538 { | |
12539 int seen_colon = 0; | |
24164
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12540 unsigned char *system_name = XSTRING (Vsystem_name)->data; |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12541 int system_name_length = strlen (system_name); |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12542 int length_until_period = 0; |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12543 |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12544 while (system_name[length_until_period] != 0 |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12545 && system_name[length_until_period] != '.') |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12546 length_until_period++; |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12547 |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12548 /* Treat `unix' like an empty host name. */ |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12549 if (! strncmp (name1, "unix:", 5)) |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12550 name1 += 4; |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12551 if (! strncmp (name2, "unix:", 5)) |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12552 name2 += 4; |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12553 /* Treat this host's name like an empty host name. */ |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12554 if (! strncmp (name1, system_name, system_name_length) |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12555 && name1[system_name_length] == ':') |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12556 name1 += system_name_length; |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12557 if (! strncmp (name2, system_name, system_name_length) |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12558 && name2[system_name_length] == ':') |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12559 name2 += system_name_length; |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12560 /* Treat this host's domainless name like an empty host name. */ |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12561 if (! strncmp (name1, system_name, length_until_period) |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12562 && name1[length_until_period] == ':') |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12563 name1 += length_until_period; |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12564 if (! strncmp (name2, system_name, length_until_period) |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12565 && name2[length_until_period] == ':') |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12566 name2 += length_until_period; |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12567 |
11015 | 12568 for (; *name1 != '\0' && *name1 == *name2; name1++, name2++) |
12569 { | |
12570 if (*name1 == ':') | |
12571 seen_colon++; | |
12572 if (seen_colon && *name1 == '.') | |
12573 return 1; | |
12574 } | |
12575 return (seen_colon | |
12576 && (*name1 == '.' || *name1 == '\0') | |
12577 && (*name2 == '.' || *name2 == '\0')); | |
12578 } | |
12579 #endif | |
12580 | |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12581 struct x_display_info * |
7801
10e818a0248a
(x_term_init): New args xrm_option and resource_string.
Richard M. Stallman <rms@gnu.org>
parents:
7738
diff
changeset
|
12582 x_term_init (display_name, xrm_option, resource_name) |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12583 Lisp_Object display_name; |
7801
10e818a0248a
(x_term_init): New args xrm_option and resource_string.
Richard M. Stallman <rms@gnu.org>
parents:
7738
diff
changeset
|
12584 char *xrm_option; |
10e818a0248a
(x_term_init): New args xrm_option and resource_string.
Richard M. Stallman <rms@gnu.org>
parents:
7738
diff
changeset
|
12585 char *resource_name; |
286 | 12586 { |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12587 int connection; |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12588 Display *dpy; |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12589 struct x_display_info *dpyinfo; |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12590 XrmDatabase xrdb; |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12591 |
11997
50c7c05fc301
(x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents:
11994
diff
changeset
|
12592 BLOCK_INPUT; |
50c7c05fc301
(x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents:
11994
diff
changeset
|
12593 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12594 if (!x_initialized) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12595 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12596 x_initialize (); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12597 x_initialized = 1; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12598 } |
286 | 12599 |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12600 #ifdef USE_X_TOOLKIT |
11436
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
12601 /* weiner@footloose.sps.mot.com reports that this causes |
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
12602 errors with X11R5: |
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
12603 X protocol error: BadAtom (invalid Atom parameter) |
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
12604 on protocol request 18skiloaf. |
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
12605 So let's not use it until R6. */ |
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
12606 #ifdef HAVE_X11XTR6 |
9446
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
12607 XtSetLanguageProc (NULL, NULL, NULL); |
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
12608 #endif |
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
12609 |
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12610 { |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12611 int argc = 0; |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12612 char *argv[3]; |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12613 |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12614 argv[0] = ""; |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12615 argc = 1; |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12616 if (xrm_option) |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12617 { |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12618 argv[argc++] = "-xrm"; |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12619 argv[argc++] = xrm_option; |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12620 } |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12621 dpy = XtOpenDisplay (Xt_app_con, XSTRING (display_name)->data, |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12622 resource_name, EMACS_CLASS, |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12623 emacs_options, XtNumber (emacs_options), |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12624 &argc, argv); |
12530
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
12625 |
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
12626 #ifdef HAVE_X11XTR6 |
14963
6ac4f300f9b4
Include locale.h if HAVE_SETLOCALE.
Richard M. Stallman <rms@gnu.org>
parents:
14946
diff
changeset
|
12627 /* I think this is to compensate for XtSetLanguageProc. */ |
23115
b992f7bb67d7
(fixup_locale): New function. For now, it resets
Paul Eggert <eggert@twinsun.com>
parents:
23107
diff
changeset
|
12628 fixup_locale (); |
12530
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
12629 #endif |
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12630 } |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12631 |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12632 #else /* not USE_X_TOOLKIT */ |
9446
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
12633 #ifdef HAVE_X11R5 |
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
12634 XSetLocaleModifiers (""); |
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
12635 #endif |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12636 dpy = XOpenDisplay (XSTRING (display_name)->data); |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12637 #endif /* not USE_X_TOOLKIT */ |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12638 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12639 /* Detect failure. */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12640 if (dpy == 0) |
11997
50c7c05fc301
(x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents:
11994
diff
changeset
|
12641 { |
50c7c05fc301
(x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents:
11994
diff
changeset
|
12642 UNBLOCK_INPUT; |
50c7c05fc301
(x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents:
11994
diff
changeset
|
12643 return 0; |
50c7c05fc301
(x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents:
11994
diff
changeset
|
12644 } |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12645 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12646 /* We have definitely succeeded. Record the new connection. */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12647 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12648 dpyinfo = (struct x_display_info *) xmalloc (sizeof (struct x_display_info)); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12649 |
11015 | 12650 #ifdef MULTI_KBOARD |
12651 { | |
12652 struct x_display_info *share; | |
12653 Lisp_Object tail; | |
12654 | |
12655 for (share = x_display_list, tail = x_display_name_list; share; | |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12656 share = share->next, tail = XCDR (tail)) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12657 if (same_x_server (XSTRING (XCAR (XCAR (tail)))->data, |
11015 | 12658 XSTRING (display_name)->data)) |
12659 break; | |
12660 if (share) | |
12661 dpyinfo->kboard = share->kboard; | |
12662 else | |
12663 { | |
12664 dpyinfo->kboard = (KBOARD *) xmalloc (sizeof (KBOARD)); | |
12665 init_kboard (dpyinfo->kboard); | |
11807
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
12666 if (!EQ (XSYMBOL (Qvendor_specific_keysyms)->function, Qunbound)) |
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
12667 { |
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
12668 char *vendor = ServerVendor (dpy); |
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
12669 dpyinfo->kboard->Vsystem_key_alist |
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
12670 = call1 (Qvendor_specific_keysyms, |
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
12671 build_string (vendor ? vendor : "")); |
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
12672 } |
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
12673 |
11015 | 12674 dpyinfo->kboard->next_kboard = all_kboards; |
12675 all_kboards = dpyinfo->kboard; | |
11544
cc965273a769
(x_term_init): If the previous kboard was the dummy one,
Karl Heuer <kwzh@gnu.org>
parents:
11536
diff
changeset
|
12676 /* Don't let the initial kboard remain current longer than necessary. |
cc965273a769
(x_term_init): If the previous kboard was the dummy one,
Karl Heuer <kwzh@gnu.org>
parents:
11536
diff
changeset
|
12677 That would cause problems if a file loaded on startup tries to |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12678 prompt in the mini-buffer. */ |
11544
cc965273a769
(x_term_init): If the previous kboard was the dummy one,
Karl Heuer <kwzh@gnu.org>
parents:
11536
diff
changeset
|
12679 if (current_kboard == initial_kboard) |
cc965273a769
(x_term_init): If the previous kboard was the dummy one,
Karl Heuer <kwzh@gnu.org>
parents:
11536
diff
changeset
|
12680 current_kboard = dpyinfo->kboard; |
11015 | 12681 } |
12682 dpyinfo->kboard->reference_count++; | |
12683 } | |
10652
f6a41cb94a75
[MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents:
10634
diff
changeset
|
12684 #endif |
f6a41cb94a75
[MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents:
10634
diff
changeset
|
12685 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12686 /* Put this display on the chain. */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12687 dpyinfo->next = x_display_list; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12688 x_display_list = dpyinfo; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12689 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12690 /* Put it on x_display_name_list as well, to keep them parallel. */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12691 x_display_name_list = Fcons (Fcons (display_name, Qnil), |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12692 x_display_name_list); |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12693 dpyinfo->name_list_element = XCAR (x_display_name_list); |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12694 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12695 dpyinfo->display = dpy; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12696 |
286 | 12697 #if 0 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12698 XSetAfterFunction (x_current_display, x_trace_wire); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
12699 #endif /* ! 0 */ |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12700 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12701 dpyinfo->x_id_name |
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21017
diff
changeset
|
12702 = (char *) xmalloc (STRING_BYTES (XSTRING (Vinvocation_name)) |
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21017
diff
changeset
|
12703 + STRING_BYTES (XSTRING (Vsystem_name)) |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12704 + 2); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12705 sprintf (dpyinfo->x_id_name, "%s@%s", |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12706 XSTRING (Vinvocation_name)->data, XSTRING (Vsystem_name)->data); |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
12707 |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
12708 /* Figure out which modifier bits mean what. */ |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12709 x_find_modifier_meanings (dpyinfo); |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
12710 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
12711 /* Get the scroll bar cursor. */ |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12712 dpyinfo->vertical_scroll_bar_cursor |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12713 = XCreateFontCursor (dpyinfo->display, XC_sb_v_double_arrow); |
2195
b20bb441f47f
(Xatom_wm_change_state): Define here.
Richard M. Stallman <rms@gnu.org>
parents:
2127
diff
changeset
|
12714 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12715 xrdb = x_load_resources (dpyinfo->display, xrm_option, |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12716 resource_name, EMACS_CLASS); |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12717 #ifdef HAVE_XRMSETDATABASE |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12718 XrmSetDatabase (dpyinfo->display, xrdb); |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12719 #else |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12720 dpyinfo->display->db = xrdb; |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12721 #endif |
11162
95b70c82ec51
(x_term_init): Initialize cut_buffers_initialized.
Karl Heuer <kwzh@gnu.org>
parents:
11122
diff
changeset
|
12722 /* Put the rdb where we can find it in a way that works on |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12723 all versions. */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12724 dpyinfo->xrdb = xrdb; |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12725 |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12726 dpyinfo->screen = ScreenOfDisplay (dpyinfo->display, |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12727 DefaultScreen (dpyinfo->display)); |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12728 dpyinfo->visual = select_visual (dpyinfo->display, dpyinfo->screen, |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12729 &dpyinfo->n_planes); |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12730 dpyinfo->height = HeightOfScreen (dpyinfo->screen); |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12731 dpyinfo->width = WidthOfScreen (dpyinfo->screen); |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12732 dpyinfo->root_window = RootWindowOfScreen (dpyinfo->screen); |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12733 dpyinfo->grabbed = 0; |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12734 dpyinfo->reference_count = 0; |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12735 dpyinfo->icon_bitmap_id = -1; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12736 dpyinfo->font_table = NULL; |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12737 dpyinfo->n_fonts = 0; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12738 dpyinfo->font_table_size = 0; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12739 dpyinfo->bitmaps = 0; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12740 dpyinfo->bitmaps_size = 0; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12741 dpyinfo->bitmaps_last = 0; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12742 dpyinfo->scratch_cursor_gc = 0; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12743 dpyinfo->mouse_face_mouse_frame = 0; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12744 dpyinfo->mouse_face_deferred_gc = 0; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12745 dpyinfo->mouse_face_beg_row = dpyinfo->mouse_face_beg_col = -1; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12746 dpyinfo->mouse_face_end_row = dpyinfo->mouse_face_end_col = -1; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12747 dpyinfo->mouse_face_face_id = DEFAULT_FACE_ID; |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12748 dpyinfo->mouse_face_window = Qnil; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12749 dpyinfo->mouse_face_mouse_x = dpyinfo->mouse_face_mouse_y = 0; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12750 dpyinfo->mouse_face_defer = 0; |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
12751 dpyinfo->x_focus_frame = 0; |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
12752 dpyinfo->x_focus_event_frame = 0; |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
12753 dpyinfo->x_highlight_frame = 0; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12754 dpyinfo->image_cache = make_image_cache (); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12755 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12756 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12757 int screen_number = XScreenNumberOfScreen (dpyinfo->screen); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12758 double pixels = DisplayHeight (dpyinfo->display, screen_number); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12759 double mm = DisplayHeightMM (dpyinfo->display, screen_number); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12760 dpyinfo->resy = pixels * 25.4 / mm; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12761 pixels = DisplayWidth (dpyinfo->display, screen_number); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12762 mm = DisplayWidthMM (dpyinfo->display, screen_number); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12763 dpyinfo->resx = pixels * 25.4 / mm; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12764 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12765 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12766 dpyinfo->Xatom_wm_protocols |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12767 = XInternAtom (dpyinfo->display, "WM_PROTOCOLS", False); |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12768 dpyinfo->Xatom_wm_take_focus |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12769 = XInternAtom (dpyinfo->display, "WM_TAKE_FOCUS", False); |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12770 dpyinfo->Xatom_wm_save_yourself |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12771 = XInternAtom (dpyinfo->display, "WM_SAVE_YOURSELF", False); |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12772 dpyinfo->Xatom_wm_delete_window |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12773 = XInternAtom (dpyinfo->display, "WM_DELETE_WINDOW", False); |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12774 dpyinfo->Xatom_wm_change_state |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12775 = XInternAtom (dpyinfo->display, "WM_CHANGE_STATE", False); |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12776 dpyinfo->Xatom_wm_configure_denied |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12777 = XInternAtom (dpyinfo->display, "WM_CONFIGURE_DENIED", False); |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12778 dpyinfo->Xatom_wm_window_moved |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12779 = XInternAtom (dpyinfo->display, "WM_MOVED", False); |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12780 dpyinfo->Xatom_editres |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12781 = XInternAtom (dpyinfo->display, "Editres", False); |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12782 dpyinfo->Xatom_CLIPBOARD |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12783 = XInternAtom (dpyinfo->display, "CLIPBOARD", False); |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12784 dpyinfo->Xatom_TIMESTAMP |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12785 = XInternAtom (dpyinfo->display, "TIMESTAMP", False); |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12786 dpyinfo->Xatom_TEXT |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12787 = XInternAtom (dpyinfo->display, "TEXT", False); |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12788 dpyinfo->Xatom_COMPOUND_TEXT |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12789 = XInternAtom (dpyinfo->display, "COMPOUND_TEXT", False); |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12790 dpyinfo->Xatom_DELETE |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12791 = XInternAtom (dpyinfo->display, "DELETE", False); |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12792 dpyinfo->Xatom_MULTIPLE |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12793 = XInternAtom (dpyinfo->display, "MULTIPLE", False); |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12794 dpyinfo->Xatom_INCR |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12795 = XInternAtom (dpyinfo->display, "INCR", False); |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12796 dpyinfo->Xatom_EMACS_TMP |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12797 = XInternAtom (dpyinfo->display, "_EMACS_TMP_", False); |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12798 dpyinfo->Xatom_TARGETS |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12799 = XInternAtom (dpyinfo->display, "TARGETS", False); |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12800 dpyinfo->Xatom_NULL |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12801 = XInternAtom (dpyinfo->display, "NULL", False); |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12802 dpyinfo->Xatom_ATOM_PAIR |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12803 = XInternAtom (dpyinfo->display, "ATOM_PAIR", False); |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12804 /* For properties of font. */ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12805 dpyinfo->Xatom_PIXEL_SIZE |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12806 = XInternAtom (dpyinfo->display, "PIXEL_SIZE", False); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12807 dpyinfo->Xatom_MULE_BASELINE_OFFSET |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12808 = XInternAtom (dpyinfo->display, "_MULE_BASELINE_OFFSET", False); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12809 dpyinfo->Xatom_MULE_RELATIVE_COMPOSE |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12810 = XInternAtom (dpyinfo->display, "_MULE_RELATIVE_COMPOSE", False); |
17103
7cde34a6424e
(dumpglyphs): Pay attention to characters registered in
Kenichi Handa <handa@m17n.org>
parents:
17050
diff
changeset
|
12811 dpyinfo->Xatom_MULE_DEFAULT_ASCENT |
7cde34a6424e
(dumpglyphs): Pay attention to characters registered in
Kenichi Handa <handa@m17n.org>
parents:
17050
diff
changeset
|
12812 = XInternAtom (dpyinfo->display, "_MULE_DEFAULT_ASCENT", False); |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12813 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12814 /* Ghostscript support. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12815 dpyinfo->Xatom_PAGE = XInternAtom (dpyinfo->display, "PAGE", False); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12816 dpyinfo->Xatom_DONE = XInternAtom (dpyinfo->display, "DONE", False); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12817 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12818 dpyinfo->Xatom_Scrollbar = XInternAtom (dpyinfo->display, "SCROLLBAR", |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12819 False); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12820 |
11162
95b70c82ec51
(x_term_init): Initialize cut_buffers_initialized.
Karl Heuer <kwzh@gnu.org>
parents:
11122
diff
changeset
|
12821 dpyinfo->cut_buffers_initialized = 0; |
95b70c82ec51
(x_term_init): Initialize cut_buffers_initialized.
Karl Heuer <kwzh@gnu.org>
parents:
11122
diff
changeset
|
12822 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12823 connection = ConnectionNumber (dpyinfo->display); |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12824 dpyinfo->connection = connection; |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12825 |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12826 { |
18705
c4f2eab8e736
(x_term_init): Don't use initializer for null_bits.
Richard M. Stallman <rms@gnu.org>
parents:
18646
diff
changeset
|
12827 char null_bits[1]; |
c4f2eab8e736
(x_term_init): Don't use initializer for null_bits.
Richard M. Stallman <rms@gnu.org>
parents:
18646
diff
changeset
|
12828 |
c4f2eab8e736
(x_term_init): Don't use initializer for null_bits.
Richard M. Stallman <rms@gnu.org>
parents:
18646
diff
changeset
|
12829 null_bits[0] = 0x00; |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12830 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12831 dpyinfo->null_pixel |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12832 = XCreatePixmapFromBitmapData (dpyinfo->display, dpyinfo->root_window, |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12833 null_bits, 1, 1, (long) 0, (long) 0, |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12834 1); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12835 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12836 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12837 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12838 extern int gray_bitmap_width, gray_bitmap_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12839 extern unsigned char *gray_bitmap_bits; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12840 dpyinfo->gray |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12841 = XCreatePixmapFromBitmapData (dpyinfo->display, dpyinfo->root_window, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12842 gray_bitmap_bits, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12843 gray_bitmap_width, gray_bitmap_height, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12844 (unsigned long) 1, (unsigned long) 0, 1); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12845 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12846 |
9572 | 12847 #ifdef subprocesses |
12848 /* This is only needed for distinguishing keyboard and process input. */ | |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12849 if (connection != 0) |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12850 add_keyboard_wait_descriptor (connection); |
9572 | 12851 #endif |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
12852 |
4147
c6657758fb6f
* xterm.c (x_term_init): Adjust message printed when we can't
Jim Blandy <jimb@redhat.com>
parents:
3951
diff
changeset
|
12853 #ifndef F_SETOWN_BUG |
286 | 12854 #ifdef F_SETOWN |
12855 #ifdef F_SETOWN_SOCK_NEG | |
4683
6a5197116086
(x_term_init): Call change_keyboard_wait_descriptor,
Richard M. Stallman <rms@gnu.org>
parents:
4630
diff
changeset
|
12856 /* stdin is a socket here */ |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12857 fcntl (connection, F_SETOWN, -getpid ()); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
12858 #else /* ! defined (F_SETOWN_SOCK_NEG) */ |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12859 fcntl (connection, F_SETOWN, getpid ()); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
12860 #endif /* ! defined (F_SETOWN_SOCK_NEG) */ |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
12861 #endif /* ! defined (F_SETOWN) */ |
4147
c6657758fb6f
* xterm.c (x_term_init): Adjust message printed when we can't
Jim Blandy <jimb@redhat.com>
parents:
3951
diff
changeset
|
12862 #endif /* F_SETOWN_BUG */ |
286 | 12863 |
12864 #ifdef SIGIO | |
11994
b4dd8ca308dd
(x_term_init): Call init_sigio only if interrupt_input.
Karl Heuer <kwzh@gnu.org>
parents:
11988
diff
changeset
|
12865 if (interrupt_input) |
b4dd8ca308dd
(x_term_init): Call init_sigio only if interrupt_input.
Karl Heuer <kwzh@gnu.org>
parents:
11988
diff
changeset
|
12866 init_sigio (connection); |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
12867 #endif /* ! defined (SIGIO) */ |
286 | 12868 |
15904
a31cfab57f69
(x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents:
15808
diff
changeset
|
12869 #ifdef USE_LUCID |
19021
6f150e46a5fd
(x_term_init) [! HAVE_X11R5]: Don't try to use XtCvtStringToFont.
Richard M. Stallman <rms@gnu.org>
parents:
18996
diff
changeset
|
12870 #ifdef HAVE_X11R5 /* It seems X11R4 lacks XtCvtStringToFont, and XPointer. */ |
15904
a31cfab57f69
(x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents:
15808
diff
changeset
|
12871 /* Make sure that we have a valid font for dialog boxes |
a31cfab57f69
(x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents:
15808
diff
changeset
|
12872 so that Xt does not crash. */ |
a31cfab57f69
(x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents:
15808
diff
changeset
|
12873 { |
a31cfab57f69
(x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents:
15808
diff
changeset
|
12874 Display *dpy = dpyinfo->display; |
a31cfab57f69
(x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents:
15808
diff
changeset
|
12875 XrmValue d, fr, to; |
a31cfab57f69
(x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents:
15808
diff
changeset
|
12876 Font font; |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
12877 int count; |
15904
a31cfab57f69
(x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents:
15808
diff
changeset
|
12878 |
a31cfab57f69
(x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents:
15808
diff
changeset
|
12879 d.addr = (XPointer)&dpy; |
a31cfab57f69
(x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents:
15808
diff
changeset
|
12880 d.size = sizeof (Display *); |
a31cfab57f69
(x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents:
15808
diff
changeset
|
12881 fr.addr = XtDefaultFont; |
a31cfab57f69
(x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents:
15808
diff
changeset
|
12882 fr.size = sizeof (XtDefaultFont); |
a31cfab57f69
(x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents:
15808
diff
changeset
|
12883 to.size = sizeof (Font *); |
a31cfab57f69
(x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents:
15808
diff
changeset
|
12884 to.addr = (XPointer)&font; |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
12885 count = x_catch_errors (dpy); |
15904
a31cfab57f69
(x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents:
15808
diff
changeset
|
12886 if (!XtCallConverter (dpy, XtCvtStringToFont, &d, 1, &fr, &to, NULL)) |
a31cfab57f69
(x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents:
15808
diff
changeset
|
12887 abort (); |
a31cfab57f69
(x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents:
15808
diff
changeset
|
12888 if (x_had_errors_p (dpy) || !XQueryFont (dpy, font)) |
a31cfab57f69
(x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents:
15808
diff
changeset
|
12889 XrmPutLineResource (&xrdb, "Emacs.dialog.*.font: 9x15"); |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
12890 x_uncatch_errors (dpy, count); |
15904
a31cfab57f69
(x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents:
15808
diff
changeset
|
12891 } |
a31cfab57f69
(x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents:
15808
diff
changeset
|
12892 #endif |
19021
6f150e46a5fd
(x_term_init) [! HAVE_X11R5]: Don't try to use XtCvtStringToFont.
Richard M. Stallman <rms@gnu.org>
parents:
18996
diff
changeset
|
12893 #endif |
15904
a31cfab57f69
(x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents:
15808
diff
changeset
|
12894 |
11997
50c7c05fc301
(x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents:
11994
diff
changeset
|
12895 UNBLOCK_INPUT; |
50c7c05fc301
(x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents:
11994
diff
changeset
|
12896 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12897 return dpyinfo; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12898 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12899 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12900 /* Get rid of display DPYINFO, assuming all frames are already gone, |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12901 and without sending any more commands to the X server. */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12902 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12903 void |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12904 x_delete_display (dpyinfo) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12905 struct x_display_info *dpyinfo; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12906 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12907 delete_keyboard_wait_descriptor (dpyinfo->connection); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12908 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12909 /* Discard this display from x_display_name_list and x_display_list. |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12910 We can't use Fdelq because that can quit. */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12911 if (! NILP (x_display_name_list) |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12912 && EQ (XCAR (x_display_name_list), dpyinfo->name_list_element)) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12913 x_display_name_list = XCDR (x_display_name_list); |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12914 else |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12915 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12916 Lisp_Object tail; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12917 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12918 tail = x_display_name_list; |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12919 while (CONSP (tail) && CONSP (XCDR (tail))) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12920 { |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12921 if (EQ (XCAR (XCDR (tail)), |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12922 dpyinfo->name_list_element)) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12923 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12924 XCDR (tail) = XCDR (XCDR (tail)); |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12925 break; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12926 } |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12927 tail = XCDR (tail); |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12928 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12929 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12930 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12931 if (x_display_list == dpyinfo) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12932 x_display_list = dpyinfo->next; |
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12933 else |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12934 { |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12935 struct x_display_info *tail; |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12936 |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12937 for (tail = x_display_list; tail; tail = tail->next) |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12938 if (tail->next == dpyinfo) |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12939 tail->next = tail->next->next; |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12940 } |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12941 |
12771
6f07c79d9a05
(x_delete_display) [AIX]: Don't call XRmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
12750
diff
changeset
|
12942 #ifndef USE_X_TOOLKIT /* I'm told Xt does this itself. */ |
6f07c79d9a05
(x_delete_display) [AIX]: Don't call XRmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
12750
diff
changeset
|
12943 #ifndef AIX /* On AIX, XCloseDisplay calls this. */ |
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12944 XrmDestroyDatabase (dpyinfo->xrdb); |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12945 #endif |
12771
6f07c79d9a05
(x_delete_display) [AIX]: Don't call XRmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
12750
diff
changeset
|
12946 #endif |
11015 | 12947 #ifdef MULTI_KBOARD |
12948 if (--dpyinfo->kboard->reference_count == 0) | |
11166
0e9fad3ccf03
(x_delete_display): Extract kboard deletion, for modularity.
Karl Heuer <kwzh@gnu.org>
parents:
11162
diff
changeset
|
12949 delete_kboard (dpyinfo->kboard); |
10652
f6a41cb94a75
[MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents:
10634
diff
changeset
|
12950 #endif |
f6a41cb94a75
[MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents:
10634
diff
changeset
|
12951 xfree (dpyinfo->font_table); |
f6a41cb94a75
[MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents:
10634
diff
changeset
|
12952 xfree (dpyinfo->x_id_name); |
f6a41cb94a75
[MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents:
10634
diff
changeset
|
12953 xfree (dpyinfo); |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12954 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12955 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12956 /* Set up use of X before we make the first connection. */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12957 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12958 static struct redisplay_interface x_redisplay_interface = |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12959 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12960 x_produce_glyphs, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12961 x_write_glyphs, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12962 x_insert_glyphs, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12963 x_clear_end_of_line, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12964 x_scroll_run, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12965 x_after_update_window_line, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12966 x_update_window_begin, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12967 x_update_window_end, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12968 XTcursor_to, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12969 x_flush, |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
12970 x_get_glyph_overhangs, |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
12971 x_fix_overlapping_area |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12972 }; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12973 |
21514 | 12974 void |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12975 x_initialize () |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12976 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12977 rif = &x_redisplay_interface; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12978 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12979 clear_frame_hook = x_clear_frame; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12980 ins_del_lines_hook = x_ins_del_lines; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12981 change_line_highlight_hook = x_change_line_highlight; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12982 delete_glyphs_hook = x_delete_glyphs; |
286 | 12983 ring_bell_hook = XTring_bell; |
12984 reset_terminal_modes_hook = XTreset_terminal_modes; | |
12985 set_terminal_modes_hook = XTset_terminal_modes; | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12986 update_begin_hook = x_update_begin; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12987 update_end_hook = x_update_end; |
286 | 12988 set_terminal_window_hook = XTset_terminal_window; |
12989 read_socket_hook = XTread_socket; | |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
12990 frame_up_to_date_hook = XTframe_up_to_date; |
286 | 12991 reassert_line_highlight_hook = XTreassert_line_highlight; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
12992 mouse_position_hook = XTmouse_position; |
771 | 12993 frame_rehighlight_hook = XTframe_rehighlight; |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
12994 frame_raise_lower_hook = XTframe_raise_lower; |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
12995 set_vertical_scroll_bar_hook = XTset_vertical_scroll_bar; |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
12996 condemn_scroll_bars_hook = XTcondemn_scroll_bars; |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
12997 redeem_scroll_bar_hook = XTredeem_scroll_bar; |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
12998 judge_scroll_bars_hook = XTjudge_scroll_bars; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12999 estimate_mode_line_height_hook = x_estimate_mode_line_height; |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
13000 |
771 | 13001 scroll_region_ok = 1; /* we'll scroll partial frames */ |
286 | 13002 char_ins_del_ok = 0; /* just as fast to write the line */ |
13003 line_ins_del_ok = 1; /* we'll just blt 'em */ | |
13004 fast_clear_end_of_line = 1; /* X does this well */ | |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
13005 memory_below_frame = 0; /* we don't remember what scrolls |
286 | 13006 off the bottom */ |
13007 baud_rate = 19200; | |
13008 | |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13009 x_noop_count = 0; |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
13010 last_tool_bar_item = -1; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13011 any_help_event_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13012 |
4476
e7de1b007447
(x_term_init): Set the hooks before we call Fset_input_mode.
Richard M. Stallman <rms@gnu.org>
parents:
4304
diff
changeset
|
13013 /* Try to use interrupt input; if we can't, then start polling. */ |
e7de1b007447
(x_term_init): Set the hooks before we call Fset_input_mode.
Richard M. Stallman <rms@gnu.org>
parents:
4304
diff
changeset
|
13014 Fset_input_mode (Qt, Qnil, Qt, Qnil); |
e7de1b007447
(x_term_init): Set the hooks before we call Fset_input_mode.
Richard M. Stallman <rms@gnu.org>
parents:
4304
diff
changeset
|
13015 |
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13016 #ifdef USE_X_TOOLKIT |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13017 XtToolkitInitialize (); |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13018 Xt_app_con = XtCreateApplicationContext (); |
12494
bfbe2490dbf0
(x_initialize) [USE_X_TOOLKIT]: Set fallback resources.
Richard M. Stallman <rms@gnu.org>
parents:
12431
diff
changeset
|
13019 XtAppSetFallbackResources (Xt_app_con, Xt_default_resources); |
26800
e828d4307ab9
(x_initialize): only setup xaw3d_* if they've been declared.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26789
diff
changeset
|
13020 #endif |
e828d4307ab9
(x_initialize): only setup xaw3d_* if they've been declared.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26789
diff
changeset
|
13021 #if USE_TOOLKIT_SCROLL_BARS |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
13022 xaw3d_arrow_scroll = False; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
13023 xaw3d_pick_top = True; |
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13024 #endif |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13025 |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
13026 /* Note that there is no real way portable across R3/R4 to get the |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
13027 original error handler. */ |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
13028 XSetErrorHandler (x_error_handler); |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
13029 XSetIOErrorHandler (x_io_error_quitter); |
286 | 13030 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13031 /* Disable Window Change signals; they are handled by X events. */ |
286 | 13032 #ifdef SIGWINCH |
13033 signal (SIGWINCH, SIG_DFL); | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
13034 #endif /* ! defined (SIGWINCH) */ |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
13035 |
10743
6977bff3ff38
(x_display_bar_cursor): Use frame's cursor_width.
Richard M. Stallman <rms@gnu.org>
parents:
10652
diff
changeset
|
13036 signal (SIGPIPE, x_connection_signal); |
286 | 13037 } |
395 | 13038 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13039 |
395 | 13040 void |
13041 syms_of_xterm () | |
13042 { | |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
13043 staticpro (&x_error_message_string); |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
13044 x_error_message_string = Qnil; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
13045 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13046 staticpro (&x_display_name_list); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13047 x_display_name_list = Qnil; |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
13048 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
13049 staticpro (&last_mouse_scroll_bar); |
4948
7653c78ac0c1
(syms_of_xterm): Initialize last_mouse_scroll_bar.
Richard M. Stallman <rms@gnu.org>
parents:
4909
diff
changeset
|
13050 last_mouse_scroll_bar = Qnil; |
11807
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
13051 |
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
13052 staticpro (&Qvendor_specific_keysyms); |
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
13053 Qvendor_specific_keysyms = intern ("vendor-specific-keysyms"); |
15803
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
13054 |
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
13055 staticpro (&last_mouse_press_frame); |
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
13056 last_mouse_press_frame = Qnil; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13057 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13058 staticpro (&help_echo); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13059 help_echo = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13060 staticpro (&previous_help_echo); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13061 previous_help_echo = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13062 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13063 DEFVAR_BOOL ("x-stretch-cursor", &x_stretch_cursor_p, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13064 "*Non-nil means draw block cursor as wide as the glyph under it.\n\ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13065 For example, if a block cursor is over a tab, it will be drawn as\n\ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13066 wide as that tab on the display."); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13067 x_stretch_cursor_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13068 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13069 DEFVAR_BOOL ("x-toolkit-scroll-bars-p", &x_toolkit_scroll_bars_p, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13070 "If not nil, Emacs uses toolkit scroll bars."); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13071 #if USE_TOOLKIT_SCROLL_BARS |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13072 x_toolkit_scroll_bars_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13073 #else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13074 x_toolkit_scroll_bars_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13075 #endif |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13076 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13077 defsubr (&Sxt_process_timeouts); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13078 staticpro (&last_mouse_motion_frame); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13079 last_mouse_motion_frame = Qnil; |
395 | 13080 } |
14694
41de9b2640a1
(X_CONNECTION_LOCK_FLAG): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
14692
diff
changeset
|
13081 |
41de9b2640a1
(X_CONNECTION_LOCK_FLAG): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
14692
diff
changeset
|
13082 #endif /* not HAVE_X_WINDOWS */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13083 |