Mercurial > emacs
annotate src/xterm.c @ 28582:c5731a195ae1
Use AC_FUNC_GETLOADAVG, AC_FUNC_MKTIME.
author | Dave Love <fx@gnu.org> |
---|---|
date | Fri, 14 Apr 2000 11:21:41 +0000 |
parents | 17fb2089c222 |
children | 437e522505fb |
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" |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
75 #include "dispextern.h" |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
76 #include "fontset.h" |
286 | 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" |
27428
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
91 #include "atimer.h" |
286 | 92 |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
93 #ifdef USE_X_TOOLKIT |
15117
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
94 #include <X11/Shell.h> |
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
95 #endif |
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
96 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
97 #include <sys/types.h> |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
98 #ifdef HAVE_SYS_TIME_H |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
99 #include <sys/time.h> |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
100 #endif |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
101 #ifdef HAVE_UNISTD_H |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
102 #include <unistd.h> |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
103 #endif |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
104 |
15117
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
105 #ifdef USE_X_TOOLKIT |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
106 |
5898
105c99071e9b
(x_destroy_window) [USE_X_TOOLKIT]: Call free_frame_menubar.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5872
diff
changeset
|
107 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
|
108 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
|
109 |
13507
9a9f459075af
(HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents:
13363
diff
changeset
|
110 #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
|
111 #define HACK_EDITRES |
6941
a914781ef58a
(Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents:
6934
diff
changeset
|
112 extern void _XEditResCheckMessages (); |
13507
9a9f459075af
(HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents:
13363
diff
changeset
|
113 #endif /* not NO_EDITRES */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
114 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
115 /* 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
|
116 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
117 #ifdef USE_TOOLKIT_SCROLL_BARS |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
118 #if defined USE_MOTIF |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
119 #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
|
120 #include <Xm/ScrollBar.h> |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
121 #include <Xm/ScrollBarP.h> |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
122 #else /* !USE_MOTIF i.e. use Xaw */ |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
123 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
124 #ifdef HAVE_XAW3D |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
125 #include <X11/Xaw3d/Simple.h> |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
126 #include <X11/Xaw3d/Scrollbar.h> |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
127 #define ARROW_SCROLLBAR |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
128 #include <X11/Xaw3d/ScrollbarP.h> |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
129 #else /* !HAVE_XAW3D */ |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
130 #include <X11/Xaw/Simple.h> |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
131 #include <X11/Xaw/Scrollbar.h> |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
132 #endif /* !HAVE_XAW3D */ |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
133 #ifndef XtNpickTop |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
134 #define XtNpickTop "pickTop" |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
135 #endif /* !XtNpickTop */ |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
136 #endif /* !USE_MOTIF */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
137 #endif /* USE_TOOLKIT_SCROLL_BARS */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
138 |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
139 #endif /* USE_X_TOOLKIT */ |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
140 |
6022
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
141 #ifndef USE_X_TOOLKIT |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
142 #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
|
143 #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
|
144 #endif |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
145 |
7602
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
146 #ifdef USE_X_TOOLKIT |
12189 | 147 #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
|
148 #ifndef XtNinitialState |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
149 #define XtNinitialState "initialState" |
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 #endif |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
152 |
14305
3cc44eaf9ebf
(x_connection_signal): Explicitly check the thread interlock
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
153 #ifdef SOLARIS2 |
15292 | 154 /* memmove will be defined as a macro in Xfuncs.h unless |
155 <string.h> is included beforehand. The declaration for memmove in | |
156 <string.h> will cause a syntax error when Xfuncs.h later includes it. */ | |
157 #include <string.h> | |
158 #endif | |
159 | |
14522
9cee3e7c6468
(min, max): Don't define if already defined.
Richard M. Stallman <rms@gnu.org>
parents:
14489
diff
changeset
|
160 #ifndef min |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
161 #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
|
162 #endif |
9cee3e7c6468
(min, max): Don't define if already defined.
Richard M. Stallman <rms@gnu.org>
parents:
14489
diff
changeset
|
163 #ifndef max |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
164 #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
|
165 #endif |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
166 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
167 #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
|
168 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
169 #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
|
170 |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
171 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
172 /* Bitmaps for truncated lines. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
173 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
174 enum bitmap_type |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
175 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
176 NO_BITMAP, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
177 LEFT_TRUNCATION_BITMAP, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
178 RIGHT_TRUNCATION_BITMAP, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
179 OVERLAY_ARROW_BITMAP, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
180 CONTINUED_LINE_BITMAP, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
181 CONTINUATION_LINE_BITMAP, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
182 ZV_LINE_BITMAP |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
185 /* 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
|
186 `indicate-empty-lines' is non-nil. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
187 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
188 #define zv_width 8 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
189 #define zv_height 8 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
190 static unsigned char zv_bits[] = { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
191 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
|
192 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
193 /* An arrow like this: `<-'. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
194 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
195 #define left_width 8 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
196 #define left_height 8 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
197 static unsigned char left_bits[] = { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
198 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
|
199 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
200 /* Right truncation arrow bitmap `->'. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
201 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
202 #define right_width 8 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
203 #define right_height 8 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
204 static unsigned char right_bits[] = { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
205 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
|
206 |
25465 | 207 /* Marker for continued lines. */ |
208 | |
209 #define continued_width 8 | |
210 #define continued_height 8 | |
211 static unsigned char continued_bits[] = { | |
212 0x3c, 0x7c, 0xc0, 0xe4, 0xfc, 0x7c, 0x3c, 0x7c}; | |
213 | |
214 /* Marker for continuation lines. */ | |
215 | |
216 #define continuation_width 8 | |
217 #define continuation_height 8 | |
218 static unsigned char continuation_bits[] = { | |
219 0x3c, 0x3e, 0x03, 0x27, 0x3f, 0x3e, 0x3c, 0x3e}; | |
220 | |
221 /* Overlay arrow bitmap. */ | |
222 | |
223 #if 0 | |
224 /* A bomb. */ | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
225 #define ov_width 8 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
226 #define ov_height 8 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
227 static unsigned char ov_bits[] = { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
228 0x30, 0x08, 0x3c, 0x7e, 0x7a, 0x7a, 0x62, 0x3c}; |
25465 | 229 #else |
230 /* A triangular arrow. */ | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
231 #define ov_width 8 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
232 #define ov_height 8 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
233 static unsigned char ov_bits[] = { |
25465 | 234 0x03, 0x0f, 0x1f, 0x3f, 0x3f, 0x1f, 0x0f, 0x03}; |
235 | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
236 #endif |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
237 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
238 extern Lisp_Object Qhelp_echo; |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
241 /* 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
|
242 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
243 int x_toolkit_scroll_bars_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
244 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
245 /* 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
|
246 (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
|
247 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
248 static Lisp_Object help_echo; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
249 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
250 /* Temporary variable for XTread_socket. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
251 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
252 static Lisp_Object previous_help_echo; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
253 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
254 /* 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
|
255 start. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
256 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
257 static int any_help_event_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
258 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
259 /* 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
|
260 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
|
261 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
|
262 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
263 int x_stretch_cursor_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
264 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
265 /* 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
|
266 use. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
267 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
268 struct x_display_info *x_display_list; |
286 | 269 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
270 /* 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
|
271 . 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
|
272 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
|
273 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
|
274 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
275 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
|
276 |
2474
86c8a6e08fd4
Fix typo in comment delimiter.
Richard M. Stallman <rms@gnu.org>
parents:
2468
diff
changeset
|
277 /* 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
|
278 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
|
279 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
|
280 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
|
281 |
2468
35aa32e1a003
* xterm.c (updating_frame): Declare this extern instead of static,
Jim Blandy <jimb@redhat.com>
parents:
2439
diff
changeset
|
282 extern struct frame *updating_frame; |
771 | 283 |
21514 | 284 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
|
285 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
286 /* 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
|
287 |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
288 struct frame *pending_autoraise_frame; |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
289 |
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
290 #ifdef USE_X_TOOLKIT |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
291 /* The application context for Xt use. */ |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
292 XtAppContext Xt_app_con; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
293 static String Xt_default_resources[] = {0}; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
294 #endif /* USE_X_TOOLKIT */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
295 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
296 /* 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
|
297 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
|
298 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
|
299 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
300 struct cursor_pos output_cursor; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
301 |
27428
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
302 /* Non-zero means user is interacting with a toolkit scroll bar. */ |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
303 |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
304 static int toolkit_scroll_bar_interaction; |
286 | 305 |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
306 /* Mouse movement. |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
307 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
308 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
|
309 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
|
310 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
|
311 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
|
312 |
c99dd01d9334
(note_mouse_movement): Don't call XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
14963
diff
changeset
|
313 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
|
314 |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
315 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
|
316 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
|
317 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
|
318 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
|
319 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
|
320 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
|
321 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
|
322 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
|
323 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
|
324 is off. */ |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
325 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
326 /* 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
|
327 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
328 FRAME_PTR last_mouse_frame; |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
329 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
|
330 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
|
331 |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
332 /* 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
|
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 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
|
335 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
|
336 an ordinary motion. |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
337 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
338 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
|
339 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
|
340 event. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
341 |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
342 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
|
343 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
344 /* 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
|
345 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
|
346 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
|
347 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
|
348 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
|
349 it's somewhat accurate. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
350 |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
351 static Time last_mouse_movement_time; |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
352 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
353 /* 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
|
354 events. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
355 |
9337
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
356 #ifdef __STDC__ |
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
357 static int volatile input_signal_count; |
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
358 #else |
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
359 static int input_signal_count; |
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
360 #endif |
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
361 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
362 /* Used locally within XTread_socket. */ |
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 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
|
365 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
366 /* 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
|
367 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
368 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
|
369 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
|
370 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
371 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
|
372 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
373 /* Tells if a window manager is present or not. */ |
286 | 374 |
375 extern Lisp_Object Vx_no_window_manager; | |
376 | |
6941
a914781ef58a
(Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents:
6934
diff
changeset
|
377 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
|
378 |
286 | 379 extern int errno; |
380 | |
2661
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
381 /* 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
|
382 |
1841
338e4ffdb54b
(XTread_socket): Support extra_keyboard_modifiers.
Richard M. Stallman <rms@gnu.org>
parents:
1821
diff
changeset
|
383 extern int extra_keyboard_modifiers; |
338e4ffdb54b
(XTread_socket): Support extra_keyboard_modifiers.
Richard M. Stallman <rms@gnu.org>
parents:
1821
diff
changeset
|
384 |
11807
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
385 static Lisp_Object Qvendor_specific_keysyms; |
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
386 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
387 extern XrmDatabase x_load_resources (); |
11915
e2ab839155e1
(XTflash): Use pointers as args to select.
Karl Heuer <kwzh@gnu.org>
parents:
11904
diff
changeset
|
388 extern Lisp_Object x_icon_type (); |
e2ab839155e1
(XTflash): Use pointers as args to select.
Karl Heuer <kwzh@gnu.org>
parents:
11904
diff
changeset
|
389 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
390 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
391 /* 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
|
392 glyphs in x_draw_glyphs. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
393 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
394 enum draw_glyphs_face |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
395 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
396 DRAW_NORMAL_TEXT, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
397 DRAW_INVERSE_VIDEO, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
398 DRAW_CURSOR, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
399 DRAW_MOUSE_FACE, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
400 DRAW_IMAGE_RAISED, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
401 DRAW_IMAGE_SUNKEN |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
402 }; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
403 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
404 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
|
405 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
|
406 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
|
407 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
|
408 unsigned)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
409 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
|
410 int *, int *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
411 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
|
412 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
|
413 int *, int *, int *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
414 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
|
415 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
|
416 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
|
417 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
|
418 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
|
419 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
|
420 enum draw_glyphs_face)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
421 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
|
422 int x_catch_errors P_ ((Display *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
423 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
|
424 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
|
425 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
|
426 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
|
427 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
|
428 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
|
429 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
|
430 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
|
431 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
|
432 void x_initialize P_ ((void)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
433 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
|
434 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
|
435 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
|
436 struct glyph_row *, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
437 enum draw_glyphs_face)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
438 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
|
439 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
|
440 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
|
441 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
|
442 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
|
443 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
|
444 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
|
445 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
|
446 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
|
447 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
|
448 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
|
449 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
|
450 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
|
451 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
|
452 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
|
453 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
|
454 static void x_draw_hollow_cursor P_ ((struct window *, struct glyph_row *)); |
28321
fc0a61d81fc5
(x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents:
28307
diff
changeset
|
455 static void x_draw_bar_cursor P_ ((struct window *, struct glyph_row *, int)); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
456 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
|
457 XRectangle *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
458 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
|
459 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
|
460 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
|
461 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
|
462 XRectangle *, enum glyph_row_area)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
463 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
|
464 XRectangle *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
465 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
|
466 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
|
467 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
|
468 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
|
469 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
|
470 enum bitmap_type)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
471 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
472 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
|
473 GC, int)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
474 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
|
475 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
|
476 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
|
477 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
|
478 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
479 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
480 /* 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
|
481 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
482 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
483 x_flush (f) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
484 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
485 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
486 BLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
487 if (f == NULL) |
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 Lisp_Object rest, frame; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
490 FOR_EACH_FRAME (rest, frame) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
491 x_flush (XFRAME (frame)); |
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 else if (FRAME_X_P (f)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
494 XFlush (FRAME_X_DISPLAY (f)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
495 UNBLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
496 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
497 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
498 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
499 /* 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
|
500 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
|
501 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
|
502 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
|
503 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
|
504 performance. */ |
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 #define XFlush(DISPLAY) (void) 0 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
507 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
508 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
509 /*********************************************************************** |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
510 Debugging |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
511 ***********************************************************************/ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
512 |
12192
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
513 #if 0 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
514 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
515 /* 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
|
516 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
|
517 |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
518 struct record |
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 char *locus; |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
521 int type; |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
522 }; |
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 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
|
525 |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
526 int event_record_index; |
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 record_event (locus, type) |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
529 char *locus; |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
530 int type; |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
531 { |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
532 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
|
533 event_record_index = 0; |
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 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
|
536 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
|
537 event_record_index++; |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
538 } |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
539 |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
540 #endif /* 0 */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
541 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
542 |
12192
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
543 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
544 /* 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
|
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 * |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
547 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
|
548 Display *dpy; |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
549 { |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
550 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
|
551 |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
552 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
|
553 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
|
554 return dpyinfo; |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
555 |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
556 return 0; |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
557 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
558 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
559 |
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
560 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
561 /*********************************************************************** |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
562 Starting and ending an update |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
563 ***********************************************************************/ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
564 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
565 /* 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
|
566 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
|
567 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
|
568 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
|
569 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
|
570 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
571 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
572 x_update_begin (f) |
771 | 573 struct frame *f; |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
574 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
575 /* Nothing to do. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
576 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
577 |
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 /* 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
|
580 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
|
581 position of 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 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
584 x_update_window_begin (w) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
585 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
586 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
587 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
|
588 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
|
589 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
590 updated_window = w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
591 set_output_cursor (&w->cursor); |
286 | 592 |
593 BLOCK_INPUT; | |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
594 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
595 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
|
596 { |
6660
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
597 /* 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
|
598 display_info->mouse_face_defer = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
599 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
600 /* 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
|
601 highlighting. */ |
10274
83aaf59dabbe
(XTupdate_begin): Fix backward test in previous change.
Richard M. Stallman <rms@gnu.org>
parents:
10223
diff
changeset
|
602 if (FRAME_GARBAGED_P (f)) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
603 display_info->mouse_face_window = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
604 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
605 /* 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
|
606 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
|
607 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
|
608 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
|
609 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
|
610 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
|
611 && 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
|
612 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
613 int i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
614 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
615 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
|
616 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
|
617 break; |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
618 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
619 if (i < w->desired_matrix->nrows) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
620 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
|
621 } |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
622 } |
8781
98741404d3e0
Delete X11 conditionals.
Richard M. Stallman <rms@gnu.org>
parents:
8724
diff
changeset
|
623 |
286 | 624 UNBLOCK_INPUT; |
625 } | |
626 | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
627 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
628 /* 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
|
629 have vertical scroll bars. */ |
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 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
632 x_draw_vertical_border (w) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
633 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
634 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
635 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
|
636 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
637 /* 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
|
638 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
|
639 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
|
640 neighbor will suffice as a border. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
641 if (!WINDOW_RIGHTMOST_P (w) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
642 && !FRAME_HAS_VERTICAL_SCROLL_BARS (f)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
643 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
644 int x0, x1, y0, y1; |
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 window_box_edges (w, -1, &x0, &y0, &x1, &y1); |
25465 | 647 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
|
648 y1 -= 1; |
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 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
|
651 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
|
652 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
653 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
654 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
655 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
656 /* 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
|
657 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
|
658 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
|
659 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
|
660 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
|
661 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
662 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
663 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
|
664 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
665 int cursor_on_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
666 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
667 if (!w->pseudo_window_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
668 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
669 BLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
670 if (cursor_on_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
671 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
|
672 output_cursor.vpos, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
673 output_cursor.x, output_cursor.y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
674 x_draw_vertical_border (w); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
675 UNBLOCK_INPUT; |
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 updated_window = NULL; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
679 } |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
682 /* 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
|
683 update_end. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
684 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
685 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
686 x_update_end (f) |
771 | 687 struct frame *f; |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
688 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
689 /* Mouse highlight may be displayed again. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
690 FRAME_X_DISPLAY_INFO (f)->mouse_face_defer = 0; |
286 | 691 |
692 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
|
693 XFlush (FRAME_X_DISPLAY (f)); |
286 | 694 UNBLOCK_INPUT; |
695 } | |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
696 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
697 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
698 /* 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
|
699 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
|
700 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
|
701 |
21514 | 702 static void |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
703 XTframe_up_to_date (f) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
704 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
705 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
706 if (FRAME_X_P (f)) |
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 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
|
709 if (dpyinfo->mouse_face_deferred_gc |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
710 || f == dpyinfo->mouse_face_mouse_frame) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
711 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
712 BLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
713 if (dpyinfo->mouse_face_mouse_frame) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
714 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
|
715 dpyinfo->mouse_face_mouse_x, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
716 dpyinfo->mouse_face_mouse_y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
717 dpyinfo->mouse_face_deferred_gc = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
718 UNBLOCK_INPUT; |
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 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
721 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
722 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
723 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
724 /* 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
|
725 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
|
726 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
|
727 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
|
728 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
|
729 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
|
730 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
731 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
732 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
|
733 struct glyph_row *desired_row; |
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 struct window *w = updated_window; |
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 xassert (w); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
738 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
739 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
|
740 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
741 BLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
742 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
|
743 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
744 /* 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
|
745 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
|
746 if (windows_or_buffers_changed) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
747 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
748 struct frame *f = XFRAME (w->frame); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
749 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
|
750 int height = desired_row->visible_height; |
25465 | 751 int x = (window_box_right (w, -1) |
752 + 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
|
753 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
|
754 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
755 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
|
756 x, y, width, height, False); |
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 UNBLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
760 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
761 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
762 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
763 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
764 /* 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
|
765 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
|
766 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
|
767 drawn. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
768 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
769 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
770 x_draw_bitmap (w, row, which) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
771 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
772 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
773 enum bitmap_type which; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
774 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
775 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
|
776 Display *display = FRAME_X_DISPLAY (f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
777 Window window = FRAME_X_WINDOW (f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
778 int x, y, wd, h, dy; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
779 unsigned char *bits; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
780 Pixmap pixmap; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
781 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
|
782 struct face *face; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
783 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
|
784 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
785 /* 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
|
786 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
|
787 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
788 switch (which) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
789 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
790 case LEFT_TRUNCATION_BITMAP: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
791 wd = left_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
792 h = left_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
793 bits = left_bits; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
794 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
|
795 - wd |
25465 | 796 - (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
|
797 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
798 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
799 case OVERLAY_ARROW_BITMAP: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
800 wd = left_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
801 h = left_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
802 bits = ov_bits; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
803 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
|
804 - wd |
25465 | 805 - (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
|
806 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
807 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
808 case RIGHT_TRUNCATION_BITMAP: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
809 wd = right_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
810 h = right_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
811 bits = right_bits; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
812 x = window_box_right (w, -1); |
25465 | 813 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
|
814 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
815 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
816 case CONTINUED_LINE_BITMAP: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
817 wd = right_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
818 h = right_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
819 bits = continued_bits; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
820 x = window_box_right (w, -1); |
25465 | 821 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
|
822 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
823 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
824 case CONTINUATION_LINE_BITMAP: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
825 wd = continuation_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
826 h = continuation_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
827 bits = continuation_bits; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
828 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
|
829 - wd |
25465 | 830 - (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
|
831 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
832 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
833 case ZV_LINE_BITMAP: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
834 wd = zv_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
835 h = zv_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
836 bits = zv_bits; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
837 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
|
838 - wd |
25465 | 839 - (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
|
840 break; |
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 default: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
843 abort (); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
844 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
845 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
846 /* 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
|
847 start drawing the bitmap. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
848 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
|
849 dy = (row->height - h) / 2; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
850 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
851 /* 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
|
852 by the server. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
853 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
|
854 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
|
855 face->foreground, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
856 face->background, depth); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
857 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
|
858 XFreePixmap (display, pixmap); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
859 XSetClipMask (display, gc, None); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
860 } |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
863 /* 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
|
864 function with input blocked. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
865 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
866 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
867 x_draw_row_bitmaps (w, row) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
868 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
869 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
870 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
871 struct frame *f = XFRAME (w->frame); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
872 enum bitmap_type bitmap; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
873 struct face *face; |
25546 | 874 int header_line_height = -1; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
875 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
876 xassert (interrupt_input_blocked); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
877 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
878 /* 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
|
879 don't have to draw anything. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
880 if (row->visible_height <= 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
881 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
882 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
883 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
|
884 PREPARE_FACE_FOR_DISPLAY (f, face); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
885 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
886 /* 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
|
887 if (row->overlay_arrow_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
888 bitmap = OVERLAY_ARROW_BITMAP; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
889 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
|
890 bitmap = LEFT_TRUNCATION_BITMAP; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
891 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
|
892 bitmap = CONTINUATION_LINE_BITMAP; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
893 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
|
894 bitmap = ZV_LINE_BITMAP; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
895 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
896 bitmap = NO_BITMAP; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
897 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
898 /* 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
|
899 the flags area. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
900 if (bitmap == NO_BITMAP |
25465 | 901 || 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
|
902 || 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
|
903 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
904 /* 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
|
905 int border = ((XFASTINT (w->left) > 0 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
906 && !FRAME_HAS_VERTICAL_SCROLL_BARS (f)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
907 ? 1 : 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
908 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
|
909 |
25546 | 910 if (header_line_height < 0) |
911 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
|
912 |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
913 /* 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
|
914 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
|
915 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
|
916 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
|
917 if (face->stipple) |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
918 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
|
919 else |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
920 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
|
921 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
922 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
|
923 face->gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
924 (left |
25465 | 925 - 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
|
926 + border), |
25546 | 927 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
|
928 row->y)), |
25465 | 929 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
|
930 row->visible_height); |
25091
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
931 if (!face->stipple) |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
932 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
|
933 } |
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 /* Draw the left bitmap. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
936 if (bitmap != NO_BITMAP) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
937 x_draw_bitmap (w, row, bitmap); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
938 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
939 /* 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
|
940 if (row->truncated_on_right_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
941 bitmap = RIGHT_TRUNCATION_BITMAP; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
942 else if (row->continued_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
943 bitmap = CONTINUED_LINE_BITMAP; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
944 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
945 bitmap = NO_BITMAP; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
946 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
947 /* 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
|
948 the flags area. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
949 if (bitmap == NO_BITMAP |
25465 | 950 || 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
|
951 || 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
|
952 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
953 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
|
954 |
25546 | 955 if (header_line_height < 0) |
956 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
|
957 |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
958 /* 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
|
959 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
|
960 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
|
961 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
|
962 if (face->stipple) |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
963 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
|
964 else |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
965 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
|
966 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
|
967 face->gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
968 right, |
25546 | 969 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
|
970 row->y)), |
25465 | 971 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
|
972 row->visible_height); |
25091
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
973 if (!face->stipple) |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
974 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
|
975 } |
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 /* Draw the right bitmap. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
978 if (bitmap != NO_BITMAP) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
979 x_draw_bitmap (w, row, bitmap); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
980 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
981 |
286 | 982 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
983 /*********************************************************************** |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
984 Line Highlighting |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
987 /* 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
|
988 frames. Aborts when called. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
989 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
990 static void |
286 | 991 XTreassert_line_highlight (new, vpos) |
992 int new, vpos; | |
993 { | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
994 abort (); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
995 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
996 |
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 /* 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
|
999 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
|
1000 called. */ |
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 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1003 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
|
1004 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
|
1005 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1006 abort (); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1007 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1008 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1009 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1010 /* 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
|
1011 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
|
1012 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
|
1013 rarely happens). */ |
286 | 1014 |
21514 | 1015 static void |
286 | 1016 XTset_terminal_modes () |
1017 { | |
1018 } | |
1019 | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1020 /* 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
|
1021 the X-windows go away, and suspending requires no action. */ |
286 | 1022 |
21514 | 1023 static void |
286 | 1024 XTreset_terminal_modes () |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1028 |
286 | 1029 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1030 /*********************************************************************** |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1031 Output Cursor |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1034 /* 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
|
1035 positions are relative to updated_window. */ |
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 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1038 set_output_cursor (cursor) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1039 struct cursor_pos *cursor; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1040 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1041 output_cursor.hpos = cursor->hpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1042 output_cursor.vpos = cursor->vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1043 output_cursor.x = cursor->x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1044 output_cursor.y = cursor->y; |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1047 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1048 /* Set a nominal cursor position. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1049 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1050 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
|
1051 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
|
1052 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1053 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
|
1054 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
|
1055 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
|
1056 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
|
1057 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1058 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1059 XTcursor_to (vpos, hpos, y, x) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1060 int vpos, hpos, y, x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1061 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1062 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1063 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1064 /* 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
|
1065 if (updated_window) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1066 w = updated_window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1067 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1068 w = XWINDOW (selected_window); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1069 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1070 /* Set the output cursor. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1071 output_cursor.hpos = hpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1072 output_cursor.vpos = vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1073 output_cursor.x = x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1074 output_cursor.y = y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1075 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1076 /* 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
|
1077 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
|
1078 if (updated_window == NULL) |
286 | 1079 { |
1080 BLOCK_INPUT; | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1081 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
|
1082 XFlush (FRAME_X_DISPLAY (SELECTED_FRAME ())); |
286 | 1083 UNBLOCK_INPUT; |
1084 } | |
1085 } | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1086 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1087 |
286 | 1088 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1089 /*********************************************************************** |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1090 Display Iterator |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1091 ***********************************************************************/ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1092 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1093 /* Function prototypes of this page. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1094 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1095 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
|
1096 struct glyph *, |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1097 XChar2b *, |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1098 int *)); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1099 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
|
1100 int, XChar2b *, int)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1101 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
|
1102 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
|
1103 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
|
1104 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
|
1105 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
|
1106 int, int, double)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1107 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
|
1108 static void x_produce_image_glyph P_ ((struct it *it)); |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1109 |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1110 |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1111 /* Return a pointer to per-char metric information in FONT of a |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1112 character pointed by B which is a pointer to an XChar2b. */ |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1113 |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1114 #define PER_CHAR_METRIC(font, b) \ |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1115 ((font)->per_char \ |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1116 ? ((font)->per_char + (b)->byte2 - (font)->min_char_or_byte2 \ |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1117 + (((font)->min_byte1 || (font)->max_byte1) \ |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1118 ? (((b)->byte1 - (font)->min_byte1) \ |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1119 * ((font)->max_char_or_byte2 - (font)->min_char_or_byte2 + 1)) \ |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1120 : 0)) \ |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1121 : &((font)->max_bounds)) |
27974
d443ad369a18
(PER_CHAR_METRIC): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27967
diff
changeset
|
1122 |
d443ad369a18
(PER_CHAR_METRIC): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27967
diff
changeset
|
1123 |
d443ad369a18
(PER_CHAR_METRIC): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27967
diff
changeset
|
1124 /* Get metrics of character CHAR2B in FONT. Value is null if CHAR2B |
d443ad369a18
(PER_CHAR_METRIC): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27967
diff
changeset
|
1125 is not contained in the font. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1126 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1127 static INLINE XCharStruct * |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1128 x_per_char_metric (font, char2b) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1129 XFontStruct *font; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1130 XChar2b *char2b; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1131 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1132 /* The result metric information. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1133 XCharStruct *pcm = 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 xassert (font && char2b); |
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 if (font->per_char != NULL) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1138 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1139 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
|
1140 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1141 /* 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
|
1142 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
|
1143 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
|
1144 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
|
1145 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
|
1146 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
|
1147 if (char2b->byte1 == 0 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1148 && 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
|
1149 && 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
|
1150 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
|
1151 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1152 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1153 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1154 /* 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
|
1155 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
|
1156 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
|
1157 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
|
1158 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1159 byte1 = N/D + min_byte1 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1160 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
|
1161 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1162 where: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1163 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1164 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
|
1165 / = integer division |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1166 \ = integer modulus */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1167 if (char2b->byte1 >= font->min_byte1 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1168 && char2b->byte1 <= font->max_byte1 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1169 && 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
|
1170 && 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
|
1171 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1172 pcm = (font->per_char |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1173 + ((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
|
1174 * (char2b->byte1 - font->min_byte1)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1175 + (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
|
1176 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1177 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1178 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1179 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1180 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1181 /* 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
|
1182 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
|
1183 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
|
1184 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
|
1185 && 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
|
1186 pcm = &font->max_bounds; |
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 |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1189 return ((pcm == NULL |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1190 || pcm->width == 0 && (pcm->rbearing - pcm->lbearing) == 0) |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1191 ? NULL : pcm); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1192 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1193 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1194 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1195 /* 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
|
1196 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
|
1197 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1198 static INLINE void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1199 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
|
1200 int c; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1201 XChar2b *char2b; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1202 struct font_info *font_info; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1203 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1204 int charset = CHAR_CHARSET (c); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1205 XFontStruct *font = font_info->font; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1206 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1207 /* 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
|
1208 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
|
1209 fixed encoding. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1210 if (font_info->font_encoder) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1211 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1212 /* It's a program. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1213 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
|
1214 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1215 if (CHARSET_DIMENSION (charset) == 1) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1216 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1217 ccl->reg[0] = charset; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1218 ccl->reg[1] = char2b->byte2; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1219 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1220 else |
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 ccl->reg[0] = charset; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1223 ccl->reg[1] = char2b->byte1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1224 ccl->reg[2] = char2b->byte2; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1225 } |
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 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
|
1228 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1229 /* 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
|
1230 program. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1231 if (font->max_byte1 == 0) /* 1-byte font */ |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1232 char2b->byte1 = 0, char2b->byte2 = ccl->reg[1]; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1233 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1234 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
|
1235 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1236 else if (font_info->encoding[charset]) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1237 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1238 /* 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
|
1239 encoding numbers. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1240 int enc = font_info->encoding[charset]; |
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 if ((enc == 1 || enc == 2) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1243 && CHARSET_DIMENSION (charset) == 2) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1244 char2b->byte1 |= 0x80; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1245 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1246 if (enc == 1 || enc == 3) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1247 char2b->byte2 |= 0x80; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1248 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1249 } |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1252 /* 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
|
1253 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
|
1254 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
|
1255 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
|
1256 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1257 static INLINE struct face * |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1258 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
|
1259 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1260 int c, face_id; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1261 XChar2b *char2b; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1262 int multibyte_p; |
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 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
|
1265 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1266 if (!multibyte_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1267 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1268 /* 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
|
1269 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
|
1270 char2b->byte1 = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1271 char2b->byte2 = c; |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1272 face_id = FACE_FOR_CHAR (f, face, c); |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1273 face = FACE_FROM_ID (f, face_id); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1274 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1275 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
|
1276 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1277 /* 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
|
1278 char2b->byte1 = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1279 char2b->byte2 = c; |
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 else |
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 int c1, c2, charset; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1284 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1285 /* 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
|
1286 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
|
1287 SPLIT_CHAR (c, charset, c1, c2); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1288 if (c2 > 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1289 char2b->byte1 = c1, char2b->byte2 = c2; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1290 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1291 char2b->byte1 = 0, char2b->byte2 = c1; |
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 /* Maybe encode the character in *CHAR2B. */ |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1294 if (face->font != NULL) |
24991
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 struct font_info *font_info |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1297 = 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
|
1298 if (font_info) |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1299 x_encode_char (c, char2b, font_info); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1300 } |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1303 /* 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
|
1304 xassert (face != NULL); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1305 PREPARE_FACE_FOR_DISPLAY (f, face); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1306 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1307 return face; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1308 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1309 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1310 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1311 /* 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
|
1312 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
|
1313 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
|
1314 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1315 static INLINE struct face * |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1316 x_get_glyph_face_and_encoding (f, glyph, char2b, two_byte_p) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1317 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1318 struct glyph *glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1319 XChar2b *char2b; |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1320 int *two_byte_p; |
24991
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 struct face *face; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1323 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1324 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
|
1325 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
|
1326 |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1327 if (two_byte_p) |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1328 *two_byte_p = 0; |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1329 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1330 if (!glyph->multibyte_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1331 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1332 /* 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
|
1333 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
|
1334 char2b->byte1 = 0; |
27000
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
1335 char2b->byte2 = glyph->u.ch; |
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
1336 } |
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
1337 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
|
1338 && 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
|
1339 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1340 /* 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
|
1341 char2b->byte1 = 0; |
27000
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
1342 char2b->byte2 = glyph->u.ch; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1343 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1344 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1345 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1346 int c1, c2, charset; |
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 /* 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
|
1349 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
|
1350 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
|
1351 if (c2 > 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1352 char2b->byte1 = c1, char2b->byte2 = c2; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1353 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1354 char2b->byte1 = 0, char2b->byte2 = c1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1355 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1356 /* Maybe encode the character in *CHAR2B. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1357 if (charset != CHARSET_ASCII) |
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 font_info *font_info |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1360 = 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
|
1361 if (font_info) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1362 { |
27000
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
1363 x_encode_char (glyph->u.ch, char2b, font_info); |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1364 if (two_byte_p) |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1365 *two_byte_p |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1366 = ((XFontStruct *) (font_info->font))->max_byte1 > 0; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1367 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1368 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1369 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1370 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1371 /* 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
|
1372 xassert (face != NULL); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1373 PREPARE_FACE_FOR_DISPLAY (f, face); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1374 return face; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1375 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1376 |
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 /* 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
|
1379 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
|
1380 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1381 static INLINE void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1382 x_append_glyph (it) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1383 struct it *it; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1384 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1385 struct glyph *glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1386 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
|
1387 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1388 xassert (it->glyph_row); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1389 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
|
1390 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1391 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
|
1392 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
|
1393 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1394 /* 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
|
1395 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
|
1396 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
|
1397 glyph->u.val = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1398 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1399 glyph->type = CHAR_GLYPH; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1400 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
|
1401 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
|
1402 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
|
1403 glyph->charpos = CHARPOS (it->position); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1404 glyph->object = it->object; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1405 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
|
1406 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
|
1407 glyph->voffset = it->voffset; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1408 glyph->multibyte_p = it->multibyte_p; |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
1409 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
|
1410 || it->phys_descent > it->descent); |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1411 glyph->glyph_not_available_p = it->glyph_not_available_p; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1412 ++it->glyph_row->used[area]; |
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 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1415 |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1416 /* 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
|
1417 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
|
1418 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1419 static INLINE void |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1420 x_append_composite_glyph (it) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1421 struct it *it; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1422 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1423 struct glyph *glyph; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1424 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
|
1425 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1426 xassert (it->glyph_row); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1427 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1428 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
|
1429 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
|
1430 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1431 /* 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
|
1432 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
|
1433 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
|
1434 glyph->u.val = 0; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1435 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1436 glyph->type = COMPOSITE_GLYPH; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1437 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
|
1438 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
|
1439 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
|
1440 glyph->charpos = CHARPOS (it->position); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1441 glyph->object = it->object; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1442 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
|
1443 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
|
1444 glyph->voffset = it->voffset; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1445 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
|
1446 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
|
1447 || it->phys_descent > it->descent); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1448 ++it->glyph_row->used[area]; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1449 } |
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 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1452 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1453 /* 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
|
1454 IT->voffset. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1455 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1456 static INLINE void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1457 take_vertical_position_into_account (it) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1458 struct it *it; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1459 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1460 if (it->voffset) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1461 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1462 if (it->voffset < 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1463 /* 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
|
1464 in the line. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1465 it->ascent += abs (it->voffset); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1466 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1467 /* 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
|
1468 in the line. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1469 it->descent += it->voffset; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1470 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1471 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1472 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1473 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1474 /* 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
|
1475 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
|
1476 an overview of struct display_iterator. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1477 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1478 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1479 x_produce_image_glyph (it) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1480 struct it *it; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1481 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1482 struct image *img; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1483 struct face *face; |
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 xassert (it->what == IT_IMAGE); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1486 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1487 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
|
1488 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
|
1489 xassert (img); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1490 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1491 /* 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
|
1492 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
|
1493 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
|
1494 |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
1495 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
|
1496 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
|
1497 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
|
1498 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1499 it->nglyphs = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1500 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1501 if (face->box != FACE_NO_BOX) |
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 it->ascent += face->box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1504 it->descent += face->box_line_width; |
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 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
|
1507 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
|
1508 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
|
1509 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
|
1510 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1511 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1512 take_vertical_position_into_account (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 if (it->glyph_row) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1515 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1516 struct glyph *glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1517 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
|
1518 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1519 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
|
1520 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
|
1521 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1522 glyph->type = IMAGE_GLYPH; |
27000
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
1523 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
|
1524 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
|
1525 glyph->pixel_width = it->pixel_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1526 glyph->charpos = CHARPOS (it->position); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1527 glyph->object = it->object; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1528 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
|
1529 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
|
1530 glyph->voffset = it->voffset; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1531 glyph->multibyte_p = it->multibyte_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1532 ++it->glyph_row->used[area]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1533 } |
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 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1536 |
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 /* 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
|
1539 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
|
1540 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
|
1541 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
|
1542 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1543 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1544 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
|
1545 struct it *it; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1546 Lisp_Object object; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1547 int width, height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1548 double ascent; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1549 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1550 struct glyph *glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1551 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
|
1552 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1553 xassert (ascent >= 0 && ascent <= 1); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1554 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1555 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
|
1556 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
|
1557 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1558 glyph->type = STRETCH_GLYPH; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1559 glyph->u.stretch.ascent = height * ascent; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1560 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
|
1561 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
|
1562 glyph->pixel_width = width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1563 glyph->charpos = CHARPOS (it->position); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1564 glyph->object = object; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1565 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
|
1566 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
|
1567 glyph->voffset = it->voffset; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1568 glyph->multibyte_p = it->multibyte_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1569 ++it->glyph_row->used[area]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1570 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1571 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1572 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1573 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1574 /* 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
|
1575 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
|
1576 `(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
|
1577 being recognized: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1578 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1579 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
|
1580 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
|
1581 point number. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1582 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1583 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
|
1584 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
|
1585 `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
|
1586 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1587 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
|
1588 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
|
1589 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1590 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
|
1591 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1592 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
|
1593 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
|
1594 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1595 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
|
1596 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
|
1597 the glyph property. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1598 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1599 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
|
1600 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1601 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
|
1602 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
|
1603 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
|
1604 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1605 #define NUMVAL(X) \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1606 ((INTEGERP (X) || FLOATP (X)) \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1607 ? XFLOATINT (X) \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1608 : - 1) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1609 |
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 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1612 x_produce_stretch_glyph (it) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1613 struct it *it; |
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 /* (space :width WIDTH :height HEIGHT. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1616 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
|
1617 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
|
1618 extern Lisp_Object QCalign_to; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1619 Lisp_Object prop, plist; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1620 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
|
1621 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
|
1622 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
|
1623 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1624 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
|
1625 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1626 /* List should start with `space'. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1627 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
|
1628 plist = XCDR (it->object); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1629 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1630 /* Compute the width of the stretch. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1631 if (prop = Fplist_get (plist, QCwidth), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1632 NUMVAL (prop) > 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1633 /* 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
|
1634 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
|
1635 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
|
1636 NUMVAL (prop) > 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1637 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1638 /* 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
|
1639 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
|
1640 property. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1641 struct it it2; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1642 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
|
1643 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1644 it2 = *it; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1645 if (it->multibyte_p) |
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 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
|
1648 - IT_BYTEPOS (*it)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1649 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
|
1650 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1651 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1652 it2.c = *p, it2.len = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1653 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1654 it2.glyph_row = NULL; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1655 it2.what = IT_CHARACTER; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1656 x_produce_glyphs (&it2); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1657 width = NUMVAL (prop) * it2.pixel_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1658 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1659 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
|
1660 NUMVAL (prop) > 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1661 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
|
1662 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1663 /* 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
|
1664 width = CANON_X_UNIT (it->f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1665 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1666 /* Compute height. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1667 if (prop = Fplist_get (plist, QCheight), |
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 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
|
1670 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
|
1671 NUMVAL (prop) > 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1672 height = FONT_HEIGHT (font) * NUMVAL (prop); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1673 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1674 height = FONT_HEIGHT (font); |
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 /* 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
|
1677 `: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
|
1678 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
|
1679 if (prop = Fplist_get (plist, QCascent), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1680 NUMVAL (prop) > 0 && NUMVAL (prop) <= 100) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1681 ascent = NUMVAL (prop) / 100.0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1682 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1683 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
|
1684 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1685 if (width <= 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1686 width = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1687 if (height <= 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1688 height = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1689 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1690 if (it->glyph_row) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1691 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1692 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
|
1693 if (!STRINGP (object)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1694 object = it->w->buffer; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1695 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
|
1696 } |
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 it->pixel_width = width; |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
1699 it->ascent = it->phys_ascent = height * ascent; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
1700 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
|
1701 it->nglyphs = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1702 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1703 if (face->box != FACE_NO_BOX) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1704 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1705 it->ascent += face->box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1706 it->descent += face->box_line_width; |
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 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
|
1709 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
|
1710 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
|
1711 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
|
1712 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1713 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1714 take_vertical_position_into_account (it); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1715 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1716 |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1717 /* 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
|
1718 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
|
1719 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
|
1720 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1721 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
|
1722 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1723 -------------------------+-----------+- |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1724 -+-+---------+-+ | | |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1725 | | | | | | |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1726 | | | | F_ASCENT F_HEIGHT |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1727 | | | ASCENT | | |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1728 HEIGHT | | | | | |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1729 | | |-|-+------+-----------|------- baseline |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1730 | | | | BOFF | | |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1731 | |---------|-+-+ | | |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1732 | | | DESCENT | | |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1733 -+-+---------+-+ F_DESCENT | |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1734 -------------------------+-----------+- |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1735 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1736 -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
|
1737 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
|
1738 DESCENT = FONT->descent |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1739 HEIGHT = FONT_HEIGHT (FONT) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1740 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
|
1741 - 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
|
1742 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
|
1743 */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1744 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1745 #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
|
1746 ((FONT)->descent \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1747 + (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
|
1748 - ((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
|
1749 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1750 /* 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
|
1751 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
|
1752 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
|
1753 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1754 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1755 x_produce_glyphs (it) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1756 struct it *it; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1757 { |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1758 it->glyph_not_available_p = 0; |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1759 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1760 if (it->what == IT_CHARACTER) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1761 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1762 XChar2b char2b; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1763 XFontStruct *font; |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1764 struct face *face = FACE_FROM_ID (it->f, it->face_id); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1765 XCharStruct *pcm; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1766 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
|
1767 struct font_info *font_info; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1768 int boff; /* baseline offset */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1769 |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1770 /* Maybe translate single-byte characters to multibyte, or the |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1771 other way. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1772 it->char_to_display = it->c; |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1773 if (!ASCII_BYTE_P (it->c)) |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1774 { |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1775 if (unibyte_display_via_language_environment |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1776 && SINGLE_BYTE_CHAR_P (it->c) |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1777 && (it->c >= 0240 |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1778 || !NILP (Vnonascii_translation_table))) |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1779 { |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1780 it->char_to_display = unibyte_char_to_multibyte (it->c); |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1781 it->face_id = FACE_FOR_CHAR (it->f, face, it->char_to_display); |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1782 face = FACE_FROM_ID (it->f, it->face_id); |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1783 } |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1784 else if (!SINGLE_BYTE_CHAR_P (it->c) |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1785 && !it->multibyte_p) |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1786 { |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1787 it->char_to_display = multibyte_char_to_unibyte (it->c, Qnil); |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1788 it->face_id = FACE_FOR_CHAR (it->f, face, it->char_to_display); |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1789 face = FACE_FROM_ID (it->f, it->face_id); |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1790 } |
24991
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 |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1793 /* Get font to use. Encode IT->char_to_display. */ |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1794 x_get_char_face_and_encoding (it->f, it->char_to_display, |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1795 it->face_id, &char2b, |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1796 it->multibyte_p); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1797 font = face->font; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1798 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1799 /* 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
|
1800 font_not_found_p = font == NULL; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1801 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
|
1802 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1803 font = FRAME_FONT (it->f); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1804 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
|
1805 font_info = NULL; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1806 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1807 else |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1808 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1809 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
|
1810 boff = font_info->baseline_offset; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1811 if (font_info->vertical_centering) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1812 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
|
1813 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1814 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1815 if (it->char_to_display >= ' ' |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1816 && (!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
|
1817 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1818 /* Either unibyte or ASCII. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1819 int stretched_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1820 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1821 it->nglyphs = 1; |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
1822 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
1823 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
|
1824 it->ascent = font->ascent + boff; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1825 it->descent = font->descent - boff; |
28443
17fb2089c222
(x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents:
28417
diff
changeset
|
1826 |
17fb2089c222
(x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents:
28417
diff
changeset
|
1827 if (pcm) |
17fb2089c222
(x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents:
28417
diff
changeset
|
1828 { |
17fb2089c222
(x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents:
28417
diff
changeset
|
1829 it->phys_ascent = pcm->ascent + boff; |
17fb2089c222
(x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents:
28417
diff
changeset
|
1830 it->phys_descent = pcm->descent - boff; |
17fb2089c222
(x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents:
28417
diff
changeset
|
1831 it->pixel_width = pcm->width; |
17fb2089c222
(x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents:
28417
diff
changeset
|
1832 } |
17fb2089c222
(x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents:
28417
diff
changeset
|
1833 else |
17fb2089c222
(x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents:
28417
diff
changeset
|
1834 { |
17fb2089c222
(x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents:
28417
diff
changeset
|
1835 it->glyph_not_available_p = 1; |
17fb2089c222
(x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents:
28417
diff
changeset
|
1836 it->phys_ascent = font->ascent + boff; |
17fb2089c222
(x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents:
28417
diff
changeset
|
1837 it->phys_descent = font->descent - boff; |
17fb2089c222
(x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents:
28417
diff
changeset
|
1838 it->pixel_width = FONT_WIDTH (font); |
17fb2089c222
(x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents:
28417
diff
changeset
|
1839 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1840 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1841 /* 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
|
1842 `space-width' property, change its width. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1843 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
|
1844 if (stretched_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1845 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
|
1846 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1847 /* 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
|
1848 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
|
1849 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
|
1850 if (face->box != FACE_NO_BOX) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1851 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1852 int thick = face->box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1853 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1854 it->ascent += thick; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1855 it->descent += thick; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1856 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1857 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
|
1858 it->pixel_width += thick; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1859 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
|
1860 it->pixel_width += thick; |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1863 /* 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
|
1864 (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
|
1865 if (face->overline_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1866 it->ascent += 2; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1867 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1868 take_vertical_position_into_account (it); |
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 /* 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
|
1871 if (it->glyph_row) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1872 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1873 if (stretched_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1874 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1875 /* 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
|
1876 into a stretch glyph. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1877 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
|
1878 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
|
1879 it->ascent + it->descent, ascent); |
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 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1882 x_append_glyph (it); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1883 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1884 /* 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
|
1885 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
|
1886 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
|
1887 if (pcm->lbearing < 0 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1888 || pcm->rbearing > pcm->width) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1889 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
|
1890 } |
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 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
|
1893 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1894 /* 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
|
1895 it->pixel_width = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1896 it->nglyphs = 0; |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1897 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
|
1898 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
|
1899 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1900 if (face->box != FACE_NO_BOX) |
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 int thick = face->box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1903 it->ascent += thick; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1904 it->descent += thick; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1905 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1906 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1907 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
|
1908 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1909 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
|
1910 int x = (it->current_x |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1911 - it->prompt_width |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1912 + it->continuation_lines_width); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1913 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
|
1914 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1915 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
|
1916 it->nglyphs = 1; |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1917 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
|
1918 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
|
1919 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1920 if (it->glyph_row) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1921 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1922 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
|
1923 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
|
1924 it->ascent + it->descent, ascent); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1925 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1926 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1927 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1928 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1929 /* 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
|
1930 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
|
1931 width of the font. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1932 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1933 /* 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
|
1934 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
|
1935 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
|
1936 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
|
1937 did. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1938 pcm = x_per_char_metric (font, &char2b); |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1939 if (font_not_found_p || !pcm) |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1940 { |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1941 int charset = CHAR_CHARSET (it->char_to_display); |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1942 |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1943 it->glyph_not_available_p = 1; |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1944 it->pixel_width = (FONT_WIDTH (FRAME_FONT (it->f)) |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1945 * CHARSET_WIDTH (charset)); |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1946 it->phys_ascent = font->ascent + boff; |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1947 it->phys_descent = font->descent - boff; |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1948 } |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1949 else |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1950 { |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1951 it->pixel_width = pcm->width; |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1952 it->phys_ascent = pcm->ascent + boff; |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1953 it->phys_descent = pcm->descent - boff; |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1954 if (it->glyph_row |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1955 && (pcm->lbearing < 0 |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1956 || pcm->rbearing > pcm->width)) |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1957 it->glyph_row->contains_overlapping_glyphs_p = 1; |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1958 } |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1959 it->nglyphs = 1; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1960 it->ascent = font->ascent + boff; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1961 it->descent = font->descent - boff; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1962 if (face->box != FACE_NO_BOX) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1963 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1964 int thick = face->box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1965 it->ascent += thick; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1966 it->descent += thick; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1967 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1968 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
|
1969 it->pixel_width += thick; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1970 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
|
1971 it->pixel_width += thick; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1972 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1973 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1974 /* 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
|
1975 (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
|
1976 if (face->overline_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1977 it->ascent += 2; |
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 take_vertical_position_into_account (it); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1980 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1981 if (it->glyph_row) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1982 x_append_glyph (it); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1983 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1984 } |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1985 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
|
1986 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1987 /* 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
|
1988 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
|
1989 XChar2b char2b; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1990 XFontStruct *font; |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1991 struct face *face = FACE_FROM_ID (it->f, it->face_id); |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1992 XCharStruct *pcm; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1993 int font_not_found_p; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1994 struct font_info *font_info; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1995 int boff; /* baseline offset */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1996 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
|
1997 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1998 /* 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
|
1999 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
|
2000 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
|
2001 && 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
|
2002 && (it->c >= 0240 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2003 || (it->c >= 0200 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2004 && !NILP (Vnonascii_translation_table)))) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2005 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2006 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
|
2007 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2008 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2009 /* Get face and font to use. Encode IT->char_to_display. */ |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
2010 it->face_id = FACE_FOR_CHAR (it->f, face, it->char_to_display); |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
2011 face = FACE_FROM_ID (it->f, it->face_id); |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
2012 x_get_char_face_and_encoding (it->f, it->char_to_display, |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
2013 it->face_id, &char2b, it->multibyte_p); |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2014 font = face->font; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2015 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2016 /* 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
|
2017 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
|
2018 if (font_not_found_p) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2019 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2020 font = FRAME_FONT (it->f); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2021 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
|
2022 font_info = NULL; |
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 else |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2025 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2026 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
|
2027 boff = font_info->baseline_offset; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2028 if (font_info->vertical_centering) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2029 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
|
2030 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2031 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2032 /* 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
|
2033 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
|
2034 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
|
2035 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
|
2036 it->nglyphs = 1; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2037 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2038 /* 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
|
2039 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
|
2040 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
|
2041 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
|
2042 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
|
2043 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
|
2044 correct the display anyway. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2045 if (cmp->font != (void *) font) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2046 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2047 /* 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
|
2048 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
|
2049 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
|
2050 them respectively. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2051 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
|
2052 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
|
2053 /* 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
|
2054 int leftmost, rightmost, lowest, highest; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2055 int i; |
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 cmp->font = (void *) font; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2058 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2059 /* Initialize the bounding box. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2060 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
|
2061 leftmost = 0; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2062 rightmost = pcm->width; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2063 lowest = - pcm->descent + boff; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2064 highest = pcm->ascent + boff; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2065 if (font_info |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2066 && font_info->default_ascent |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2067 && 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
|
2068 && !NILP (Faref (Vuse_default_ascent, |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2069 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
|
2070 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
|
2071 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2072 /* 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
|
2073 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
|
2074 the left. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2075 cmp->offsets[0] = 0; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2076 cmp->offsets[1] = boff; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2077 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2078 /* 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
|
2079 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
|
2080 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2081 int left, right, btm, top; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2082 int ch = COMPOSITION_GLYPH (cmp, i); |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
2083 int face_id = FACE_FOR_CHAR (it->f, face, ch); |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
2084 |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
2085 face = FACE_FROM_ID (it->f, face_id); |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
2086 x_get_char_face_and_encoding (it->f, ch, face->id, &char2b, |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
2087 it->multibyte_p); |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2088 font = face->font; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2089 if (font == NULL) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2090 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2091 font = FRAME_FONT (it->f); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2092 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
|
2093 font_info = NULL; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2094 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2095 else |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2096 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2097 font_info |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2098 = 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
|
2099 boff = font_info->baseline_offset; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2100 if (font_info->vertical_centering) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2101 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
|
2102 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2103 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2104 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
|
2105 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2106 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
|
2107 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2108 /* Relative composition with or without |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2109 alternate chars. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2110 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
|
2111 btm = - pcm->descent + boff; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2112 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
|
2113 && (! 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
|
2114 || NILP (Faref (Vignore_relative_composition, |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2115 make_number (ch))))) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2116 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2117 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2118 if (- pcm->descent |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2119 >= font_info->relative_compose) |
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 = highest + 1; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2122 else if (pcm->ascent <= 0) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2123 /* 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
|
2124 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
|
2125 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2126 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2127 else |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2128 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2129 /* 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
|
2130 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
|
2131 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
|
2132 specified by numbers as below: |
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 0---1---2 -- ascent |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2135 | | |
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 | | |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2138 9--10--11 -- center |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2139 | | |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2140 ---3---4---5--- baseline |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2141 | | |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2142 6---7---8 -- descent |
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 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
|
2145 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
|
2146 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2147 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
|
2148 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
|
2149 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
|
2150 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2151 left = (leftmost |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2152 + grefx * (rightmost - leftmost) / 2 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2153 - nrefx * pcm->width / 2); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2154 btm = ((grefy == 0 ? highest |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2155 : grefy == 1 ? 0 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2156 : grefy == 2 ? lowest |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2157 : (highest + lowest) / 2) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2158 - (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
|
2159 : nrefy == 1 ? pcm->descent - boff |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2160 : nrefy == 2 ? 0 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2161 : (pcm->ascent + pcm->descent) / 2)); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2162 } |
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 cmp->offsets[i * 2] = left; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2165 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
|
2166 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2167 /* 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
|
2168 right = left + pcm->width; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2169 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
|
2170 if (left < leftmost) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2171 leftmost = left; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2172 if (right > rightmost) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2173 rightmost = right; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2174 if (top > highest) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2175 highest = top; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2176 if (btm < lowest) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2177 lowest = btm; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2178 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2179 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2180 /* 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
|
2181 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
|
2182 non-negative. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2183 if (leftmost < 0) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2184 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2185 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
|
2186 cmp->offsets[i * 2] -= leftmost; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2187 rightmost -= leftmost; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2188 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2189 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2190 cmp->pixel_width = rightmost; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2191 cmp->ascent = highest; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2192 cmp->descent = - lowest; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2193 if (cmp->ascent < font_ascent) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2194 cmp->ascent = font_ascent; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2195 if (cmp->descent < font_descent) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2196 cmp->descent = font_descent; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2197 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2198 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2199 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
|
2200 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
|
2201 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
|
2202 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2203 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
|
2204 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2205 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
|
2206 it->ascent += thick; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2207 it->descent += thick; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2208 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2209 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
|
2210 it->pixel_width += thick; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2211 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
|
2212 it->pixel_width += thick; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2213 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2214 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2215 /* 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
|
2216 (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
|
2217 if (face->overline_p) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2218 it->ascent += 2; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2219 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2220 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
|
2221 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2222 if (it->glyph_row) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2223 x_append_composite_glyph (it); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2224 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2225 else if (it->what == IT_IMAGE) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2226 x_produce_image_glyph (it); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2227 else if (it->what == IT_STRETCH) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2228 x_produce_stretch_glyph (it); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2229 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2230 /* Accumulate dimensions. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2231 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
|
2232 if (it->area == TEXT_AREA) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2233 it->current_x += it->pixel_width; |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2234 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2235 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
|
2236 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
|
2237 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
|
2238 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
|
2239 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2240 |
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 /* 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
|
2243 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
|
2244 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2245 int |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2246 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
|
2247 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2248 enum face_id face_id; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2249 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2250 int height = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2251 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2252 /* 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
|
2253 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
|
2254 if (FRAME_FACE_CACHE (f)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2255 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2256 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
|
2257 if (face) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2258 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
|
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 return height; |
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 |
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 Glyph display |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2269 /* 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
|
2270 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2271 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
|
2272 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
|
2273 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
|
2274 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
|
2275 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2276 struct glyph_string |
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 /* X-origin of the string. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2279 int x; |
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 /* 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
|
2282 int y, ybase; |
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, not including a face extension. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2285 int 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 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
|
2288 int background_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2289 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2290 /* 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
|
2291 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
|
2292 font the string is drawn in. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2293 int height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2294 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2295 /* 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
|
2296 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
|
2297 -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
|
2298 int left_overhang; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2299 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2300 /* 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
|
2301 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
|
2302 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
|
2303 int right_overhang; |
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 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
|
2306 struct frame *f; |
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 /* 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
|
2309 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2310 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2311 /* X display and window for convenience. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2312 Display *display; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2313 Window window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2314 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2315 /* 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
|
2316 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
|
2317 struct glyph_row *row; |
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 /* The area within row. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2320 enum glyph_row_area area; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2321 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2322 /* 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
|
2323 XChar2b *char2b; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2324 int nchars; |
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; |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
2585 struct face *face; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2586 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2587 /* 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
|
2588 face_id = FRAME_X_DISPLAY_INFO (s->f)->mouse_face_face_id; |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
2589 face = FACE_FROM_ID (s->f, face_id); |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
2590 face_id = FACE_FOR_CHAR (s->f, face, s->first_glyph->u.ch); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2591 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
|
2592 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
|
2593 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2594 /* 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
|
2595 if (s->font == s->face->font) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2596 s->gc = s->face->gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2597 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2598 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2599 /* 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
|
2600 but font FONT. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2601 XGCValues xgcv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2602 unsigned long mask; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2603 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2604 xgcv.background = s->face->background; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2605 xgcv.foreground = s->face->foreground; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2606 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
|
2607 xgcv.font = s->font->fid; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2608 xgcv.graphics_exposures = False; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2609 mask = GCForeground | GCBackground | GCFont | GCGraphicsExposures; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2610 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2611 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
|
2612 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
|
2613 mask, &xgcv); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2614 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2615 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
|
2616 = 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
|
2617 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2618 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
|
2619 } |
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 xassert (s->gc != 0); |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2624 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2625 /* 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
|
2626 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
|
2627 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
|
2628 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2629 static INLINE void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2630 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
|
2631 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2632 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2633 s->gc = s->face->gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2634 xassert (s->gc != 0); |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2637 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2638 /* 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
|
2639 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
|
2640 pattern. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2641 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2642 static INLINE void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2643 x_set_glyph_string_gc (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2644 struct glyph_string *s; |
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 if (s->hl == DRAW_NORMAL_TEXT) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2647 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2648 s->gc = s->face->gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2649 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
|
2650 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2651 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
|
2652 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2653 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
|
2654 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
|
2655 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2656 else if (s->hl == DRAW_CURSOR) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2657 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2658 x_set_cursor_gc (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2659 s->stippled_p = 0; |
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 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
|
2662 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2663 x_set_mouse_face_gc (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2664 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
|
2665 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2666 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
|
2667 || s->hl == DRAW_IMAGE_SUNKEN) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2668 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2669 s->gc = s->face->gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2670 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
|
2671 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2672 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2673 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2674 s->gc = s->face->gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2675 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
|
2676 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2677 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2678 /* GC must have been set. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2679 xassert (s->gc != 0); |
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 |
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 /* 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
|
2684 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2685 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2686 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
|
2687 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2688 XRectangle *r; |
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 if (s->row->full_width_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2691 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2692 /* 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
|
2693 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
|
2694 |
3a09aae52441
(x_get_glyph_string_clip_rect): Take internal border
Gerd Moellmann <gerd@gnu.org>
parents:
25068
diff
changeset
|
2695 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
|
2696 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
|
2697 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2698 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
|
2699 { |
25079
3a09aae52441
(x_get_glyph_string_clip_rect): Take internal border
Gerd Moellmann <gerd@gnu.org>
parents:
25068
diff
changeset
|
2700 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
|
2701 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
|
2702 r->x -= width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2703 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2704 |
25083
d3b7d7d2bca8
(x_setup_relief_color): Don't try smart color allocation
Gerd Moellmann <gerd@gnu.org>
parents:
25079
diff
changeset
|
2705 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
|
2706 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2707 /* 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
|
2708 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
|
2709 if (s->w->pseudo_window_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2710 r->height = s->row->visible_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2711 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2712 r->height = s->height; |
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 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2715 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2716 /* 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
|
2717 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
|
2718 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
|
2719 r->height = s->row->visible_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2720 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2721 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2722 /* 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
|
2723 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
|
2724 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
|
2725 if (!s->row->full_width_p |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2726 && MATRIX_ROW_PARTIALLY_VISIBLE_AT_TOP_P (s->w, s->row)) |
25546 | 2727 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
|
2728 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2729 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
|
2730 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
2731 /* 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
|
2732 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
|
2733 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
|
2734 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
|
2735 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2736 /* 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
|
2737 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
|
2738 intentionally draws over other lines. */ |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2739 if (s->for_overlaps_p) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2740 { |
25546 | 2741 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
|
2742 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
|
2743 } |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2744 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2745 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
|
2746 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2747 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2748 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2749 /* 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
|
2750 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
|
2751 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2752 static INLINE void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2753 x_set_glyph_string_clipping (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2754 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2755 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2756 XRectangle r; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2757 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
|
2758 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
|
2759 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2760 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2761 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2762 /* 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
|
2763 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
|
2764 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2765 static INLINE void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2766 x_compute_glyph_string_overhangs (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2767 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2768 { |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2769 if (s->cmp == NULL |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2770 && s->first_glyph->type == CHAR_GLYPH) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2771 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2772 XCharStruct cs; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2773 int direction, font_ascent, font_descent; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2774 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
|
2775 &font_ascent, &font_descent, &cs); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2776 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
|
2777 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
|
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2781 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2782 /* 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
|
2783 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
|
2784 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
|
2785 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2786 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2787 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
|
2788 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2789 int x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2790 int 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 if (backward_p) |
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 while (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2795 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2796 x_compute_glyph_string_overhangs (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2797 x -= s->width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2798 s->x = x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2799 s = s->prev; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2800 } |
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 else |
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 while (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2805 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2806 x_compute_glyph_string_overhangs (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2807 s->x = x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2808 x += s->width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2809 s = s->next; |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2814 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2815 /* 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
|
2816 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
|
2817 assumed to be zero. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2818 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2819 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2820 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
|
2821 struct glyph *glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2822 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2823 int *left, *right; |
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 int c; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2826 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2827 *left = *right = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2828 |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2829 if (glyph->type == CHAR_GLYPH) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2830 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2831 XFontStruct *font; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2832 struct face *face; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2833 struct font_info *font_info; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2834 XChar2b char2b; |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
2835 XCharStruct *pcm; |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
2836 |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
2837 face = x_get_glyph_face_and_encoding (f, glyph, &char2b, NULL); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2838 font = face->font; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2839 font_info = FONT_INFO_FROM_ID (f, face->font_info_id); |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
2840 if (font |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
2841 && (pcm = x_per_char_metric (font, &char2b))) |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
2842 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2843 if (pcm->rbearing > pcm->width) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2844 *right = pcm->rbearing - pcm->width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2845 if (pcm->lbearing < 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2846 *left = -pcm->lbearing; |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2851 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2852 /* 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
|
2853 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
|
2854 if no glyphs are overwritten. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2855 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2856 static int |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2857 x_left_overwritten (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2858 struct glyph_string *s; |
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 int k; |
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 if (s->left_overhang) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2863 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2864 int x = 0, i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2865 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
|
2866 int first = s->first_glyph - glyphs; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2867 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2868 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
|
2869 x -= glyphs[i].pixel_width; |
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 k = i + 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2872 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2873 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2874 k = -1; |
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 return k; |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2879 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2880 /* 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
|
2881 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
|
2882 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
|
2883 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2884 static int |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2885 x_left_overwriting (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2886 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2887 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2888 int i, k, x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2889 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
|
2890 int first = s->first_glyph - glyphs; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2891 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2892 k = -1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2893 x = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2894 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
|
2895 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2896 int left, right; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2897 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
|
2898 if (x + right > 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2899 k = i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2900 x -= glyphs[i].pixel_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2901 } |
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 return k; |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2906 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2907 /* 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
|
2908 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
|
2909 no such glyph is found. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2910 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2911 static int |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2912 x_right_overwritten (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2913 struct glyph_string *s; |
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 int k = -1; |
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 if (s->right_overhang) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2918 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2919 int x = 0, i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2920 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
|
2921 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
|
2922 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
|
2923 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2924 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
|
2925 x += glyphs[i].pixel_width; |
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 k = i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2928 } |
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 return k; |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2933 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2934 /* 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
|
2935 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
|
2936 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
|
2937 |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
2938 static int |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2939 x_right_overwriting (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2940 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2941 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2942 int i, k, x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2943 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
|
2944 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
|
2945 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
|
2946 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2947 k = -1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2948 x = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2949 for (i = first; i < end; ++i) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2950 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2951 int left, right; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2952 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
|
2953 if (x - left < 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2954 k = i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2955 x += glyphs[i].pixel_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2956 } |
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 return k; |
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 |
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 /* 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
|
2963 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2964 static INLINE void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2965 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
|
2966 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2967 int x, y, w, h; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2968 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2969 XGCValues xgcv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2970 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
|
2971 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
|
2972 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
|
2973 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
|
2974 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2975 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2976 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2977 /* 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
|
2978 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
|
2979 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
|
2980 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
|
2981 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
|
2982 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2983 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2984 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
|
2985 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2986 int force_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2987 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2988 /* 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
|
2989 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
|
2990 if (!s->background_filled_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2991 { |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2992 if (s->stippled_p) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2993 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2994 /* Fill background with a stipple pattern. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2995 XSetFillStyle (s->display, s->gc, FillOpaqueStippled); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2996 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
|
2997 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
|
2998 s->background_width, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2999 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
|
3000 XSetFillStyle (s->display, s->gc, FillSolid); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3001 s->background_filled_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3002 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3003 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
|
3004 || s->font_not_found_p |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3005 || 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
|
3006 || force_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3007 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3008 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
|
3009 s->background_width, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3010 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
|
3011 s->background_filled_p = 1; |
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 |
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 /* 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
|
3018 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3019 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3020 x_draw_glyph_string_foreground (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3021 struct glyph_string *s; |
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 int i, x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3024 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3025 /* 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
|
3026 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
|
3027 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
|
3028 && 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
|
3029 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
|
3030 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3031 x = s->x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3032 |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3033 /* 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
|
3034 loaded. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3035 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
|
3036 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3037 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
|
3038 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3039 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
|
3040 XDrawRectangle (s->display, s->window, |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3041 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
|
3042 s->height - 1); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3043 x += g->pixel_width; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3044 } |
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 else |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3047 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3048 char *char1b = (char *) s->char2b; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3049 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
|
3050 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3051 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
|
3052 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
|
3053 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3054 /* 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
|
3055 if (!s->two_byte_p) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3056 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
|
3057 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
|
3058 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3059 /* 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
|
3060 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
|
3061 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
|
3062 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
|
3063 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
|
3064 if (s->for_overlaps_p |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3065 || (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
|
3066 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3067 /* 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
|
3068 if (s->two_byte_p) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3069 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
|
3070 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
|
3071 else |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3072 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
|
3073 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
|
3074 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3075 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3076 { |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3077 if (s->two_byte_p) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3078 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
|
3079 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
|
3080 else |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3081 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
|
3082 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
|
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 } |
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 /* 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
|
3088 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3089 static void |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3090 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
|
3091 struct glyph_string *s; |
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 int i, x; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3094 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3095 /* 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
|
3096 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
|
3097 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
|
3098 && 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
|
3099 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
|
3100 else |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3101 x = s->x; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3102 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3103 /* 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
|
3104 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
|
3105 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
|
3106 this composition. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3107 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3108 /* 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
|
3109 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
|
3110 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
|
3111 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3112 if (s->gidx == 0) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3113 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
|
3114 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
|
3115 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3116 else |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3117 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3118 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
|
3119 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
|
3120 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
|
3121 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
|
3122 s->char2b + i, 1); |
24991
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 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3125 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3126 |
25529
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3127 #ifdef USE_X_TOOLKIT |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3128 |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3129 /* 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
|
3130 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
|
3131 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
|
3132 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
|
3133 |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3134 int |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3135 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
|
3136 Widget widget; |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3137 Colormap cmap; |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3138 XColor *color; |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3139 { |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3140 struct frame *f; |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3141 struct x_display_info *dpyinfo; |
25716
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
3142 Lisp_Object tail; |
25529
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 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
|
3145 |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3146 /* 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
|
3147 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
|
3148 (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
|
3149 x_any_window_to_frame. */ |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3150 while (!XtIsTopLevelShell (widget)) |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3151 widget = XtParent (widget); |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3152 |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3153 /* 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
|
3154 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
|
3155 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
|
3156 if (GC_FRAMEP (XCAR (tail)) |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3157 && (f = XFRAME (XCAR (tail)), |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3158 (f->output_data.nothing != 1 |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3159 && FRAME_X_DISPLAY_INFO (f) == dpyinfo)) |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3160 && f->output_data.x->widget == widget) |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3161 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
|
3162 |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3163 abort (); |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3164 } |
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 #endif /* USE_X_TOOLKIT */ |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3167 |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3168 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3169 /* 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
|
3170 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
|
3171 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
|
3172 color allocated. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3173 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3174 int |
25529
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3175 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
|
3176 struct frame *f; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3177 Colormap cmap; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3178 XColor *color; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3179 { |
25529
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3180 Display *display = FRAME_X_DISPLAY (f); |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3181 Screen *screen = FRAME_X_SCREEN (f); |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3182 int rc; |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3183 |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3184 gamma_correct (f, color); |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3185 rc = XAllocColor (display, cmap, color); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3186 if (rc == 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3187 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3188 /* 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
|
3189 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
|
3190 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
|
3191 color matching with StaticColor visuals. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3192 int nearest, i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3193 unsigned long nearest_delta = ~0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3194 int ncells = XDisplayCells (display, XScreenNumberOfScreen (screen)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3195 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
|
3196 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3197 for (i = 0; i < ncells; ++i) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3198 cells[i].pixel = i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3199 XQueryColors (display, cmap, cells, ncells); |
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 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
|
3202 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3203 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
|
3204 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
|
3205 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
|
3206 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
|
3207 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3208 if (delta < nearest_delta) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3209 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3210 nearest = i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3211 nearest_delta = delta; |
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 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3214 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3215 color->red = cells[nearest].red; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3216 color->green = cells[nearest].green; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3217 color->blue = cells[nearest].blue; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3218 rc = XAllocColor (display, cmap, color); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3219 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3220 |
28356
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3221 #ifdef DEBUG_X_COLORS |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3222 if (rc) |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3223 register_color (color->pixel); |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3224 #endif /* DEBUG_X_COLORS */ |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3225 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3226 return rc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3227 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3228 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3229 |
28356
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3230 /* Allocate color PIXEL on frame F. PIXEL must already be allocated. |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3231 It's necessary to do this instead of just using PIXEL directly to |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3232 get color reference counts right. */ |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3233 |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3234 unsigned long |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3235 x_copy_color (f, pixel) |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3236 struct frame *f; |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3237 unsigned long pixel; |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3238 { |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3239 XColor color; |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3240 |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3241 color.pixel = pixel; |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3242 BLOCK_INPUT; |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3243 XQueryColor (FRAME_X_DISPLAY (f), FRAME_X_COLORMAP (f), &color); |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3244 XAllocColor (FRAME_X_DISPLAY (f), FRAME_X_COLORMAP (f), &color); |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3245 UNBLOCK_INPUT; |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3246 #ifdef DEBUG_X_COLORS |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3247 register_color (pixel); |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3248 #endif |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3249 return color.pixel; |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3250 } |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3251 |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3252 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3253 /* 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
|
3254 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
|
3255 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
|
3256 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
|
3257 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
|
3258 Value is non-zero if successful. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3259 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3260 static int |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3261 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
|
3262 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3263 Display *display; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3264 Colormap cmap; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3265 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
|
3266 double factor; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3267 int delta; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3268 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3269 XColor color, new; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3270 int success_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3271 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3272 /* Get RGB color values. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3273 color.pixel = *pixel; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3274 XQueryColor (display, cmap, &color); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3275 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3276 /* 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
|
3277 xassert (factor >= 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3278 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
|
3279 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
|
3280 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
|
3281 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3282 /* Try to allocate the color. */ |
25529
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3283 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
|
3284 if (success_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3285 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3286 if (new.pixel == *pixel) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3287 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3288 /* 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
|
3289 delta to the RGB values. */ |
27962
048184bb751e
(x_alloc_lighter_color, x_setup_relief_color): Use
Gerd Moellmann <gerd@gnu.org>
parents:
27857
diff
changeset
|
3290 x_free_colors (f, &new.pixel, 1); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3291 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3292 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
|
3293 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
|
3294 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
|
3295 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
|
3296 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3297 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3298 success_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3299 *pixel = new.pixel; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3300 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3301 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3302 return success_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3303 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3304 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3305 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3306 /* 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
|
3307 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
|
3308 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
|
3309 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
|
3310 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
|
3311 be allocated, use DEFAULT_PIXEL, instead. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3312 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3313 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3314 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
|
3315 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3316 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
|
3317 double factor; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3318 int delta; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3319 unsigned long default_pixel; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3320 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3321 XGCValues xgcv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3322 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
|
3323 unsigned long mask = GCForeground | GCLineWidth | GCGraphicsExposures; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3324 unsigned long pixel; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3325 unsigned long background = di->relief_background; |
27985
4ba445af210b
(x_term_init): Set Colormap member of x_display_info
Gerd Moellmann <gerd@gnu.org>
parents:
27974
diff
changeset
|
3326 Colormap cmap = FRAME_X_COLORMAP (f); |
25091
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
3327 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
|
3328 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
|
3329 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3330 xgcv.graphics_exposures = False; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3331 xgcv.line_width = 1; |
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 /* 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
|
3334 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
|
3335 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
|
3336 if (relief->gc |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3337 && relief->allocated_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3338 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3339 /* 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
|
3340 necessary and some servers don't allow it. So don't do it. */ |
27962
048184bb751e
(x_alloc_lighter_color, x_setup_relief_color): Use
Gerd Moellmann <gerd@gnu.org>
parents:
27857
diff
changeset
|
3341 x_free_colors (f, &relief->pixel, 1); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3342 relief->allocated_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3343 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3344 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3345 /* Allocate new color. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3346 xgcv.foreground = default_pixel; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3347 pixel = background; |
25091
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
3348 if (dpyinfo->n_planes != 1 |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
3349 && 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
|
3350 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3351 relief->allocated_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3352 xgcv.foreground = relief->pixel = pixel; |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3355 if (relief->gc == 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3356 { |
25091
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
3357 xgcv.stipple = dpyinfo->gray; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3358 mask |= GCStipple; |
25091
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
3359 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
|
3360 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3361 else |
25091
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
3362 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
|
3363 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3364 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3365 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3366 /* 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
|
3367 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3368 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3369 x_setup_relief_colors (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3370 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3371 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3372 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
|
3373 unsigned long color; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3374 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3375 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
|
3376 color = s->face->box_color; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3377 else |
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 XGCValues xgcv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3380 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3381 /* 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
|
3382 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
|
3383 color = xgcv.background; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3384 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3385 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3386 if (di->white_relief.gc == 0 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3387 || color != di->relief_background) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3388 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3389 di->relief_background = color; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3390 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
|
3391 WHITE_PIX_DEFAULT (s->f)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3392 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
|
3393 BLACK_PIX_DEFAULT (s->f)); |
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 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3396 |
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 /* 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
|
3399 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
|
3400 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
|
3401 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
|
3402 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
|
3403 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
|
3404 when drawing. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3405 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3406 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3407 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
|
3408 raised_p, left_p, right_p, clip_rect) |
771 | 3409 struct frame *f; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3410 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
|
3411 XRectangle *clip_rect; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3412 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3413 int i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3414 GC gc; |
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 if (raised_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3417 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
|
3418 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3419 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
|
3420 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
|
3421 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3422 /* Top. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3423 for (i = 0; i < width; ++i) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3424 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
|
3425 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
|
3426 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
|
3427 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3428 /* Left. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3429 if (left_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3430 for (i = 0; i < width; ++i) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3431 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
|
3432 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
|
3433 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3434 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
|
3435 if (raised_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3436 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
|
3437 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3438 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
|
3439 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
|
3440 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3441 /* Bottom. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3442 for (i = 0; i < width; ++i) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3443 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
|
3444 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
|
3445 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
|
3446 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3447 /* Right. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3448 if (right_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3449 for (i = 0; i < width; ++i) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3450 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
|
3451 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
|
3452 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3453 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
|
3454 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3455 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3456 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3457 /* 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
|
3458 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
|
3459 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
|
3460 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
|
3461 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
|
3462 rectangle to use when drawing. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3463 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3464 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3465 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
|
3466 left_p, right_p, clip_rect) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3467 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3468 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
|
3469 XRectangle *clip_rect; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3470 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3471 XGCValues xgcv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3472 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3473 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
|
3474 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
|
3475 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
|
3476 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3477 /* Top. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3478 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
|
3479 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
|
3480 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3481 /* Left. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3482 if (left_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3483 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
|
3484 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
|
3485 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3486 /* Bottom. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3487 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
|
3488 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
|
3489 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3490 /* Right. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3491 if (right_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3492 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
|
3493 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
|
3494 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3495 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
|
3496 XSetClipMask (s->display, s->gc, None); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3497 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3498 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3499 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3500 /* 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
|
3501 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3502 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3503 x_draw_glyph_string_box (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3504 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3505 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3506 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
|
3507 int left_p, right_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3508 struct glyph *last_glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3509 XRectangle clip_rect; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3510 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3511 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
|
3512 if (s->row->full_width_p |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3513 && !s->w->pseudo_window_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3514 { |
25465 | 3515 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
|
3516 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
|
3517 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
|
3518 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3519 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3520 /* 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
|
3521 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
|
3522 ? s->first_glyph |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3523 : s->first_glyph + s->nchars - 1); |
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 width = s->face->box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3526 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
|
3527 left_x = s->x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3528 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
|
3529 ? last_x - 1 |
25302
0f10c1eaf8fb
(x_draw_glyph_string_box): Use the background width
Gerd Moellmann <gerd@gnu.org>
parents:
25269
diff
changeset
|
3530 : 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
|
3531 top_y = s->y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3532 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
|
3533 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3534 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
|
3535 || (s->hl == DRAW_MOUSE_FACE |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3536 && (s->prev == NULL |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3537 || s->prev->hl != s->hl))); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3538 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
|
3539 || (s->hl == DRAW_MOUSE_FACE |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3540 && (s->next == NULL |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3541 || s->next->hl != s->hl))); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3542 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3543 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
|
3544 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3545 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
|
3546 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
|
3547 left_p, right_p, &clip_rect); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3548 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3549 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3550 x_setup_relief_colors (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3551 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
|
3552 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
|
3553 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3554 } |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3557 /* 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
|
3558 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3559 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3560 x_draw_image_foreground (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3561 struct glyph_string *s; |
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 int x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3564 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
|
3565 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3566 /* 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
|
3567 right of that line. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3568 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
|
3569 && 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
|
3570 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
|
3571 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3572 x = s->x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3573 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3574 /* 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
|
3575 by that margin. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3576 if (s->img->margin) |
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 x += s->img->margin; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3579 y += s->img->margin; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3580 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3581 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3582 if (s->img->pixmap) |
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 if (s->img->mask) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3585 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3586 /* 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
|
3587 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
|
3588 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
|
3589 (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
|
3590 manually. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3591 unsigned long mask = (GCClipMask | GCClipXOrigin | GCClipYOrigin |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3592 | GCFunction); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3593 XGCValues xgcv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3594 XRectangle clip_rect, image_rect, r; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3595 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3596 xgcv.clip_mask = s->img->mask; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3597 xgcv.clip_x_origin = x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3598 xgcv.clip_y_origin = y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3599 xgcv.function = GXcopy; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3600 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
|
3601 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3602 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
|
3603 image_rect.x = x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3604 image_rect.y = y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3605 image_rect.width = s->img->width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3606 image_rect.height = s->img->height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3607 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
|
3608 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
|
3609 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
|
3610 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3611 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3612 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3613 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
|
3614 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
|
3615 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3616 /* 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
|
3617 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
|
3618 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
|
3619 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
|
3620 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
|
3621 nothing here for mouse-face. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3622 if (s->hl == DRAW_CURSOR) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3623 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
|
3624 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
|
3625 } |
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 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3628 /* 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
|
3629 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
|
3630 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
|
3631 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3632 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3633 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3634 /* 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
|
3635 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3636 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3637 x_draw_image_relief (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3638 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3639 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3640 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
|
3641 XRectangle r; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3642 int x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3643 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
|
3644 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3645 /* 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
|
3646 right of that line. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3647 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
|
3648 && 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
|
3649 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
|
3650 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3651 x = s->x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3652 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3653 /* 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
|
3654 by that margin. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3655 if (s->img->margin) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3656 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3657 x += s->img->margin; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3658 y += s->img->margin; |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3661 if (s->hl == DRAW_IMAGE_SUNKEN |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3662 || s->hl == DRAW_IMAGE_RAISED) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3663 { |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
3664 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
|
3665 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
|
3666 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3667 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3668 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3669 thick = abs (s->img->relief); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3670 raised_p = s->img->relief > 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3671 } |
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 x0 = x - thick; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3674 y0 = y - thick; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3675 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
|
3676 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
|
3677 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3678 x_setup_relief_colors (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3679 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
|
3680 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
|
3681 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3682 |
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 /* 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
|
3685 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3686 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3687 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
|
3688 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3689 Pixmap pixmap; |
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 int x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3692 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
|
3693 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3694 /* 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
|
3695 right of that line. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3696 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
|
3697 && 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
|
3698 x = s->face->box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3699 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3700 x = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3701 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3702 /* 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
|
3703 by that margin. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3704 if (s->img->margin) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3705 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3706 x += s->img->margin; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3707 y += s->img->margin; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3708 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3709 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3710 if (s->img->pixmap) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3711 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3712 if (s->img->mask) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3713 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3714 /* 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
|
3715 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
|
3716 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
|
3717 (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
|
3718 manually. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3719 unsigned long mask = (GCClipMask | GCClipXOrigin | GCClipYOrigin |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3720 | GCFunction); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3721 XGCValues xgcv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3722 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3723 xgcv.clip_mask = s->img->mask; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3724 xgcv.clip_x_origin = x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3725 xgcv.clip_y_origin = y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3726 xgcv.function = GXcopy; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3727 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
|
3728 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3729 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
|
3730 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
|
3731 XSetClipMask (s->display, s->gc, None); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3732 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3733 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3734 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3735 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
|
3736 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
|
3737 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3738 /* 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
|
3739 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
|
3740 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
|
3741 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
|
3742 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
|
3743 nothing here for mouse-face. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3744 if (s->hl == DRAW_CURSOR) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3745 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
|
3746 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
|
3747 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3748 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3749 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3750 /* 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
|
3751 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
|
3752 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
|
3753 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3754 |
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 /* 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
|
3757 give the rectangle to draw. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3758 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3759 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3760 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
|
3761 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3762 int x, y, w, h; |
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 if (s->stippled_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3765 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3766 /* Fill background with a stipple pattern. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3767 XSetFillStyle (s->display, s->gc, FillOpaqueStippled); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3768 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
|
3769 XSetFillStyle (s->display, s->gc, FillSolid); |
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 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3772 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
|
3773 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3774 |
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 /* Draw image glyph string S. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3777 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3778 s->y |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3779 s->x +------------------------- |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3780 | s->face->box |
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 | +------------------------- |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3783 | | s->img->margin |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3784 | | |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3785 | | +------------------- |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3786 | | | the image |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3787 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3788 */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3789 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3790 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3791 x_draw_image_glyph_string (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3792 struct glyph_string *s; |
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 int x, y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3795 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
|
3796 int margin = s->img->margin; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3797 int height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3798 Pixmap pixmap = None; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3799 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3800 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
|
3801 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3802 /* 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
|
3803 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
|
3804 flickering. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3805 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
|
3806 if (height > s->img->height |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3807 || margin |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3808 || s->img->mask |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3809 || s->img->pixmap == 0 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3810 || s->width != s->background_width) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3811 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3812 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
|
3813 x = s->x + box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3814 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3815 x = s->x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3816 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3817 y = s->y + box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3818 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3819 if (s->img->mask) |
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 /* 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
|
3822 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
|
3823 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
|
3824 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
|
3825 int depth = DefaultDepthOfScreen (screen); |
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 /* 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
|
3828 pixmap = XCreatePixmap (s->display, s->window, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3829 s->background_width, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3830 s->height, depth); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3831 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3832 /* 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
|
3833 pixmap. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3834 XSetClipMask (s->display, s->gc, None); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3835 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3836 /* 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
|
3837 if (s->stippled_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3838 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3839 /* Fill background with a stipple pattern. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3840 XSetFillStyle (s->display, s->gc, FillOpaqueStippled); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3841 XFillRectangle (s->display, pixmap, s->gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3842 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
|
3843 XSetFillStyle (s->display, s->gc, FillSolid); |
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 else |
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 XGCValues xgcv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3848 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
|
3849 &xgcv); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3850 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
|
3851 XFillRectangle (s->display, pixmap, s->gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3852 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
|
3853 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
|
3854 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3855 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3856 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3857 /* 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
|
3858 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
|
3859 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
|
3860 image. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3861 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
|
3862 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3863 s->background_filled_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3864 } |
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 /* Draw the foreground. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3867 if (pixmap != None) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3868 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3869 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
|
3870 x_set_glyph_string_clipping (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3871 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
|
3872 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
|
3873 XFreePixmap (s->display, pixmap); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3874 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3875 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3876 x_draw_image_foreground (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3877 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3878 /* 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
|
3879 if (s->img->relief |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3880 || s->hl == DRAW_IMAGE_RAISED |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3881 || s->hl == DRAW_IMAGE_SUNKEN) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3882 x_draw_image_relief (s); |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3885 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3886 /* Draw stretch glyph string S. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3887 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3888 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3889 x_draw_stretch_glyph_string (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3890 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3891 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3892 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
|
3893 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
|
3894 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3895 if (s->hl == DRAW_CURSOR |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3896 && !x_stretch_cursor_p) |
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 `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
|
3899 as wide as the stretch glyph. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3900 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
|
3901 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3902 /* Draw cursor. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3903 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
|
3904 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3905 /* 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
|
3906 if (width < s->background_width) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3907 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3908 GC gc = s->face->gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3909 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
|
3910 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
|
3911 XRectangle r; |
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 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
|
3914 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
|
3915 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3916 if (s->face->stipple) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3917 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3918 /* Fill background with a stipple pattern. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3919 XSetFillStyle (s->display, gc, FillOpaqueStippled); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3920 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
|
3921 XSetFillStyle (s->display, gc, FillSolid); |
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 else |
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 XGCValues xgcv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3926 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
|
3927 XSetForeground (s->display, gc, xgcv.background); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3928 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
|
3929 XSetForeground (s->display, gc, xgcv.foreground); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3930 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3931 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3932 } |
313 | 3933 else |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3934 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
|
3935 s->height); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3936 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3937 s->background_filled_p = 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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3941 /* Draw glyph string S. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3942 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3943 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3944 x_draw_glyph_string (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3945 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3946 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3947 /* 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
|
3948 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
|
3949 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
|
3950 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
|
3951 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3952 xassert (s->next->img == NULL); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3953 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
|
3954 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
|
3955 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
|
3956 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3957 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3958 /* 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
|
3959 x_set_glyph_string_gc (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3960 x_set_glyph_string_clipping (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3961 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3962 switch (s->first_glyph->type) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3963 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3964 case IMAGE_GLYPH: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3965 x_draw_image_glyph_string (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3966 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3967 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3968 case STRETCH_GLYPH: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3969 x_draw_stretch_glyph_string (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3970 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3971 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3972 case CHAR_GLYPH: |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3973 if (s->for_overlaps_p) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3974 s->background_filled_p = 1; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3975 else |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3976 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
|
3977 x_draw_glyph_string_foreground (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3978 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3979 |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3980 case COMPOSITE_GLYPH: |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3981 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
|
3982 s->background_filled_p = 1; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3983 else |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3984 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
|
3985 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
|
3986 break; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3987 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3988 default: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3989 abort (); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3990 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3991 |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3992 if (!s->for_overlaps_p) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3993 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3994 /* Draw underline. */ |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3995 if (s->face->underline_p) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3996 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3997 unsigned long dy, h; |
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 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
|
4000 h = 1; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4001 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
|
4002 dy = s->height - h; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4003 |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4004 if (s->face->underline_defaulted_p) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4005 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
|
4006 s->width, h); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4007 else |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4008 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4009 XGCValues xgcv; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4010 XGetGCValues (s->display, s->gc, GCForeground, &xgcv); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4011 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
|
4012 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
|
4013 s->width, h); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4014 XSetForeground (s->display, s->gc, xgcv.foreground); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4015 } |
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 /* Draw overline. */ |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4019 if (s->face->overline_p) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4020 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4021 unsigned long dy = 0, h = 1; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4022 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4023 if (s->face->overline_color_defaulted_p) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4024 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
|
4025 s->width, h); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4026 else |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4027 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4028 XGCValues xgcv; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4029 XGetGCValues (s->display, s->gc, GCForeground, &xgcv); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4030 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
|
4031 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
|
4032 s->width, h); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4033 XSetForeground (s->display, s->gc, xgcv.foreground); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4034 } |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4035 } |
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 /* Draw strike-through. */ |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4038 if (s->face->strike_through_p) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4039 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4040 unsigned long h = 1; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4041 unsigned long dy = (s->height - h) / 2; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4042 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4043 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
|
4044 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
|
4045 s->width, h); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4046 else |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4047 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4048 XGCValues xgcv; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4049 XGetGCValues (s->display, s->gc, GCForeground, &xgcv); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4050 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
|
4051 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
|
4052 s->width, h); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4053 XSetForeground (s->display, s->gc, xgcv.foreground); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4054 } |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4055 } |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4056 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4057 /* Draw relief. */ |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4058 if (s->face->box != FACE_NO_BOX) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4059 x_draw_glyph_string_box (s); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4060 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4061 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4062 /* Reset clipping. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4063 XSetClipMask (s->display, s->gc, None); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4064 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4065 |
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 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
|
4068 struct face **, int)); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4069 |
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 /* 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
|
4072 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
|
4073 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
|
4074 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
|
4075 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
|
4076 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4077 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
|
4078 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4079 static int |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4080 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
|
4081 struct glyph_string *s; |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4082 struct face **faces; |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4083 int overlaps_p; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4084 { |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4085 int i; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4086 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4087 xassert (s); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4088 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4089 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
|
4090 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4091 s->face = faces[s->gidx]; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4092 s->font = s->face->font; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4093 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
|
4094 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4095 /* 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
|
4096 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
|
4097 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
|
4098 ++s->nchars; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4099 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
|
4100 ++s->nchars; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4101 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4102 /* 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
|
4103 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
|
4104 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4105 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
|
4106 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4107 /* 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
|
4108 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
|
4109 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
|
4110 characters of the glyph string. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4111 if (s->font == NULL) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4112 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4113 s->font_not_found_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4114 s->font = FRAME_FONT (s->f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4115 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4116 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4117 /* 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
|
4118 s->ybase += s->first_glyph->voffset; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4119 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4120 xassert (s->face && s->face->gc); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4121 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4122 /* 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
|
4123 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
|
4124 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4125 return s->gidx + s->nchars; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4126 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4127 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4128 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4129 /* 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
|
4130 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
|
4131 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
|
4132 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
|
4133 use its lines physical height for clipping. |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4134 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4135 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
|
4136 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4137 static int |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4138 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
|
4139 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4140 int face_id; |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4141 int start, end, overlaps_p; |
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 struct glyph *glyph, *last; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4144 int voffset; |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
4145 int glyph_not_available_p; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4146 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4147 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
|
4148 xassert (s->nchars == 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4149 xassert (start >= 0 && end > start); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4150 |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4151 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
|
4152 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
|
4153 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
|
4154 voffset = glyph->voffset; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4155 |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
4156 glyph_not_available_p = glyph->glyph_not_available_p; |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
4157 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4158 while (glyph < last |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4159 && glyph->type == CHAR_GLYPH |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4160 && glyph->voffset == voffset |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
4161 /* Same face id implies same font, nowadays. */ |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
4162 && glyph->face_id == face_id |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
4163 && glyph->glyph_not_available_p == glyph_not_available_p) |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
4164 { |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
4165 int two_byte_p; |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
4166 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4167 s->face = x_get_glyph_face_and_encoding (s->f, glyph, |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
4168 s->char2b + s->nchars, |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
4169 &two_byte_p); |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
4170 s->two_byte_p = two_byte_p; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4171 ++s->nchars; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4172 xassert (s->nchars <= end - start); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4173 s->width += glyph->pixel_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4174 ++glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4175 } |
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 s->font = s->face->font; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4178 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
|
4179 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4180 /* 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
|
4181 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
|
4182 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
|
4183 characters of the glyph string. */ |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
4184 if (s->font == NULL || glyph_not_available_p) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4185 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4186 s->font_not_found_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4187 s->font = FRAME_FONT (s->f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4188 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4189 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4190 /* 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
|
4191 s->ybase += voffset; |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4192 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4193 xassert (s->face && s->face->gc); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4194 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
|
4195 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4196 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4197 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4198 /* 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
|
4199 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4200 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4201 x_fill_image_glyph_string (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4202 struct glyph_string *s; |
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 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
|
4205 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
|
4206 xassert (s->img); |
27000
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
4207 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
|
4208 s->font = s->face->font; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4209 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
|
4210 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4211 /* 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
|
4212 s->ybase += s->first_glyph->voffset; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4213 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4214 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4215 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4216 /* 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
|
4217 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4218 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4219 x_fill_stretch_glyph_string (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4220 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4221 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4222 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
|
4223 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
|
4224 s->font = s->face->font; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4225 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
|
4226 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4227 /* 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
|
4228 s->ybase += s->first_glyph->voffset; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4229 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4230 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4231 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4232 /* 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
|
4233 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
|
4234 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
|
4235 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
|
4236 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
|
4237 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
|
4238 face-override for drawing S. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4239 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4240 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4241 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
|
4242 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4243 XChar2b *char2b; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4244 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4245 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4246 enum glyph_row_area area; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4247 int start; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4248 enum draw_glyphs_face hl; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4249 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4250 bzero (s, sizeof *s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4251 s->w = w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4252 s->f = XFRAME (w->frame); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4253 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
|
4254 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
|
4255 s->char2b = char2b; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4256 s->hl = hl; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4257 s->row = row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4258 s->area = area; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4259 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
|
4260 s->height = row->height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4261 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
|
4262 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
4263 /* 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
|
4264 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
|
4265 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
|
4266 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4267 s->ybase = s->y + row->ascent; |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4270 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4271 /* 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
|
4272 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
|
4273 in the drawing area. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4274 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4275 static INLINE void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4276 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
|
4277 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4278 int start; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4279 int last_x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4280 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4281 /* 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
|
4282 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
|
4283 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
|
4284 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4285 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
|
4286 && s->hl == DRAW_NORMAL_TEXT |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4287 && ((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
|
4288 || s->face->background != default_face->background |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4289 || s->face->stipple != default_face->stipple)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4290 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
|
4291 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4292 /* 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
|
4293 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
|
4294 area. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4295 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
|
4296 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
|
4297 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4298 s->background_width = s->width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4299 } |
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 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
|
4303 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
|
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 /* 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
|
4311 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
|
4312 #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
|
4313 do \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4314 { \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4315 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
|
4316 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
|
4317 x_fill_stretch_glyph_string (s); \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4318 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
|
4319 ++START; \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4320 s->x = (X); \ |
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 while (0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4323 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4324 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4325 /* 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
|
4326 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
|
4327 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
|
4328 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
|
4329 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
|
4330 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
|
4331 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
|
4332 |
25692
121bd925411f
Don't continue #define args for benefit of old cc.
Dave Love <fx@gnu.org>
parents:
25682
diff
changeset
|
4333 #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
|
4334 do \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4335 { \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4336 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
|
4337 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
|
4338 x_fill_image_glyph_string (s); \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4339 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
|
4340 ++START; \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4341 s->x = (X); \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4342 } \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4343 while (0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4344 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4345 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4346 /* 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
|
4347 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
|
4348 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
|
4349 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
|
4350 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
|
4351 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
|
4352 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
|
4353 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
|
4354 |
25692
121bd925411f
Don't continue #define args for benefit of old cc.
Dave Love <fx@gnu.org>
parents:
25682
diff
changeset
|
4355 #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
|
4356 do \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4357 { \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4358 int c, charset, face_id; \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4359 XChar2b *char2b; \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4360 \ |
27000
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
4361 c = (ROW)->glyphs[AREA][START].u.ch; \ |
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
4362 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
|
4363 \ |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4364 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
|
4365 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
|
4366 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
|
4367 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
|
4368 s->x = (X); \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4369 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
|
4370 OVERLAPS_P); \ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4371 } \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4372 while (0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4373 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4374 |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4375 /* 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
|
4376 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
|
4377 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
|
4378 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
|
4379 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
|
4380 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
|
4381 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
|
4382 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
|
4383 |
26912
3470e4fea708
(BUILD_GLYPH_STRINGS): For pcc, remove continuation in arg list.
Dave Love <fx@gnu.org>
parents:
26879
diff
changeset
|
4384 #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
|
4385 do { \ |
27000
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
4386 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
|
4387 int face_id = (ROW)->glyphs[AREA][START].face_id; \ |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
4388 struct face *base_face = FACE_FROM_ID (XFRAME (w->frame), face_id); \ |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4389 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
|
4390 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
|
4391 XChar2b *char2b; \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4392 struct face **faces; \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4393 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
|
4394 int n; \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4395 \ |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
4396 base_face = base_face->ascii_face; \ |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4397 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
|
4398 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
|
4399 /* 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
|
4400 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
|
4401 { \ |
27000
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
4402 int c = COMPOSITION_GLYPH (cmp, n); \ |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
4403 int this_face_id = FACE_FOR_CHAR (XFRAME (w->frame), base_face, c); \ |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
4404 faces[n] = FACE_FROM_ID (XFRAME (w->frame), this_face_id); \ |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
4405 x_get_char_face_and_encoding (XFRAME (w->frame), c, \ |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
4406 this_face_id, char2b + n, 1); \ |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4407 } \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4408 \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4409 /* 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
|
4410 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
|
4411 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
|
4412 { \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4413 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
|
4414 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
|
4415 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
|
4416 s->cmp = cmp; \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4417 s->gidx = n; \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4418 s->x = (X); \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4419 \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4420 if (n == 0) \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4421 first_s = s; \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4422 \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4423 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
|
4424 } \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4425 \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4426 ++START; \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4427 s = first_s; \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4428 } while (0) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4429 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4430 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4431 /* 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
|
4432 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
|
4433 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
|
4434 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
|
4435 x-positions of the drawing area. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4436 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4437 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
|
4438 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
|
4439 asynchronously). */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4440 |
25692
121bd925411f
Don't continue #define args for benefit of old cc.
Dave Love <fx@gnu.org>
parents:
25682
diff
changeset
|
4441 #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
|
4442 do \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4443 { \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4444 HEAD = TAIL = NULL; \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4445 while (START < END) \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4446 { \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4447 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
|
4448 switch (first_glyph->type) \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4449 { \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4450 case CHAR_GLYPH: \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4451 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
|
4452 TAIL, HL, X, LAST_X, \ |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4453 OVERLAPS_P); \ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4454 break; \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4455 \ |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4456 case COMPOSITE_GLYPH: \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4457 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
|
4458 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
|
4459 OVERLAPS_P); \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4460 break; \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4461 \ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4462 case STRETCH_GLYPH: \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4463 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
|
4464 HEAD, TAIL, HL, X, LAST_X); \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4465 break; \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4466 \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4467 case IMAGE_GLYPH: \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4468 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
|
4469 TAIL, HL, X, LAST_X); \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4470 break; \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4471 \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4472 default: \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4473 abort (); \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4474 } \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4475 \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4476 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
|
4477 (X) += s->width; \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4478 } \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4479 } \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4480 while (0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4481 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4482 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4483 /* 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
|
4484 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
|
4485 face-override with the following meaning: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4486 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4487 DRAW_NORMAL_TEXT draw normally |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4488 DRAW_CURSOR draw in cursor face |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4489 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
|
4490 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
|
4491 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
|
4492 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
|
4493 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4494 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
|
4495 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
|
4496 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
|
4497 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
|
4498 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
|
4499 |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4500 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
|
4501 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
|
4502 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4503 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
|
4504 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4505 static int |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4506 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
|
4507 overlaps_p) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4508 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4509 int x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4510 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4511 enum glyph_row_area area; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4512 int start, end; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4513 enum draw_glyphs_face hl; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4514 int *real_start, *real_end; |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4515 int overlaps_p; |
24991
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 struct glyph_string *head, *tail; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4518 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4519 int last_x, area_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4520 int x_reached; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4521 int i, j; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4522 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4523 /* 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
|
4524 start = max (0, start); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4525 end = min (end, row->used[area]); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4526 if (real_start) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4527 *real_start = start; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4528 if (real_end) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4529 *real_end = end; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4530 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4531 /* 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
|
4532 end of the drawing area. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4533 if (row->full_width_p) |
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 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
|
4536 or flag areas. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4537 struct frame *f = XFRAME (w->frame); |
25465 | 4538 /* 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
|
4539 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
|
4540 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4541 x += window_left_x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4542 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
|
4543 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
|
4544 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4545 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
|
4546 { |
25465 | 4547 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
|
4548 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
|
4549 last_x += width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4550 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4551 x -= width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4552 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4553 |
25083
d3b7d7d2bca8
(x_setup_relief_color): Don't try smart color allocation
Gerd Moellmann <gerd@gnu.org>
parents:
25079
diff
changeset
|
4554 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
|
4555 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
|
4556 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4557 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4558 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4559 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
|
4560 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
|
4561 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
|
4562 } |
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 /* 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
|
4565 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
|
4566 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
|
4567 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
|
4568 i = start; |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4569 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
|
4570 overlaps_p); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4571 if (tail) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4572 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
|
4573 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4574 x_reached = x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4575 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4576 /* 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
|
4577 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
|
4578 strings built above. */ |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4579 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
|
4580 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4581 int dummy_x = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4582 struct glyph_string *h, *t; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4583 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4584 /* Compute overhangs for all glyph strings. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4585 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
|
4586 x_compute_glyph_string_overhangs (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4587 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4588 /* 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
|
4589 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
|
4590 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
|
4591 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
|
4592 draws over it. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4593 i = x_left_overwritten (head); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4594 if (i >= 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4595 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4596 j = i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4597 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
|
4598 DRAW_NORMAL_TEXT, dummy_x, last_x, |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4599 overlaps_p); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4600 start = i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4601 if (real_start) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4602 *real_start = start; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4603 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
|
4604 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
|
4605 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4606 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4607 /* 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
|
4608 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
|
4609 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
|
4610 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
|
4611 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
|
4612 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
|
4613 strings exist. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4614 i = x_left_overwriting (head); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4615 if (i >= 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4616 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4617 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
|
4618 DRAW_NORMAL_TEXT, dummy_x, last_x, |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4619 overlaps_p); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4620 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
|
4621 s->background_filled_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4622 if (real_start) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4623 *real_start = i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4624 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
|
4625 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
|
4626 } |
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 /* 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
|
4629 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
|
4630 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
|
4631 over it. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4632 i = x_right_overwritten (tail); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4633 if (i >= 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4634 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4635 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
|
4636 DRAW_NORMAL_TEXT, x, last_x, |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4637 overlaps_p); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4638 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
|
4639 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
|
4640 if (real_end) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4641 *real_end = i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4642 } |
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 /* 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
|
4645 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
|
4646 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
|
4647 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
|
4648 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
|
4649 i = x_right_overwriting (tail); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4650 if (i >= 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4651 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4652 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
|
4653 DRAW_NORMAL_TEXT, x, last_x, |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4654 overlaps_p); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4655 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
|
4656 s->background_filled_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4657 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
|
4658 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
|
4659 if (real_end) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4660 *real_end = i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4661 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4662 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4663 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4664 /* Draw all strings. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4665 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
|
4666 x_draw_glyph_string (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4667 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4668 /* 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
|
4669 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
|
4670 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
|
4671 if (!row->full_width_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4672 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4673 if (area > LEFT_MARGIN_AREA) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4674 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
|
4675 if (area > TEXT_AREA) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4676 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
|
4677 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4678 return x_reached; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4679 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4680 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4681 |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4682 /* 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
|
4683 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4684 static void |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4685 x_fix_overlapping_area (w, row, area) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4686 struct window *w; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4687 struct glyph_row *row; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4688 enum glyph_row_area area; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4689 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4690 int i, x; |
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 BLOCK_INPUT; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4693 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4694 if (area == LEFT_MARGIN_AREA) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4695 x = 0; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4696 else if (area == TEXT_AREA) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4697 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
|
4698 else |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4699 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
|
4700 + window_box_width (w, TEXT_AREA)); |
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 for (i = 0; i < row->used[area];) |
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 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
|
4705 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4706 int start = i, start_x = x; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4707 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4708 do |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4709 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4710 x += row->glyphs[area][i].pixel_width; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4711 ++i; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4712 } |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4713 while (i < row->used[area] |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4714 && row->glyphs[area][i].overlaps_vertically_p); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4715 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4716 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
|
4717 (row->inverse_p |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4718 ? DRAW_INVERSE_VIDEO : DRAW_NORMAL_TEXT), |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4719 NULL, NULL, 1); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4720 } |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4721 else |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4722 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4723 x += row->glyphs[area][i].pixel_width; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4724 ++i; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4725 } |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4726 } |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4727 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4728 UNBLOCK_INPUT; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4729 } |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4730 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4731 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4732 /* 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
|
4733 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
|
4734 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
|
4735 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
|
4736 row being updated. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4737 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4738 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4739 x_write_glyphs (start, len) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4740 struct glyph *start; |
286 | 4741 int len; |
4742 { | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4743 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
|
4744 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4745 xassert (updated_window && updated_row); |
286 | 4746 BLOCK_INPUT; |
24991
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 /* Write glyphs. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4749 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4750 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
|
4751 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
|
4752 updated_row, updated_area, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4753 hpos, hpos + len, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4754 (updated_row->inverse_p |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4755 ? DRAW_INVERSE_VIDEO : DRAW_NORMAL_TEXT), |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4756 &real_start, &real_end, 0); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4757 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4758 /* 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
|
4759 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
|
4760 real_end - real_start); |
286 | 4761 |
4762 UNBLOCK_INPUT; | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4763 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4764 /* Advance the output cursor. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4765 output_cursor.hpos += len; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4766 output_cursor.x = x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4767 } |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4770 /* 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
|
4771 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4772 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4773 x_insert_glyphs (start, len) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4774 struct glyph *start; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4775 register int len; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4776 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4777 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4778 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4779 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
|
4780 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4781 struct glyph *glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4782 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
|
4783 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4784 xassert (updated_window && updated_row); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4785 BLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4786 w = updated_window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4787 f = XFRAME (WINDOW_FRAME (w)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4788 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4789 /* 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
|
4790 row = updated_row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4791 line_height = row->height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4792 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4793 /* 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
|
4794 shift_by_width = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4795 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
|
4796 shift_by_width += glyph->pixel_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4797 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4798 /* 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
|
4799 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
|
4800 - output_cursor.x |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4801 - shift_by_width); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4802 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4803 /* Shift right. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4804 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
|
4805 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
|
4806 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
|
4807 f->output_data.x->normal_gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4808 frame_x, frame_y, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4809 shifted_region_width, line_height, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4810 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
|
4811 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4812 /* Write the glyphs. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4813 hpos = start - row->glyphs[updated_area]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4814 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
|
4815 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
|
4816 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
|
4817 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4818 /* Advance the output cursor. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4819 output_cursor.hpos += len; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4820 output_cursor.x += shift_by_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4821 UNBLOCK_INPUT; |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4824 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4825 /* 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
|
4826 for X frames. */ |
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 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4829 x_delete_glyphs (n) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4830 register int n; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4831 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4832 abort (); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4833 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4834 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4835 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4836 /* 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
|
4837 (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
|
4838 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
|
4839 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4840 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
|
4841 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
|
4842 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4843 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4844 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
|
4845 int to_x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4846 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4847 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4848 struct window *w = updated_window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4849 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
|
4850 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
|
4851 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4852 xassert (updated_window && updated_row); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4853 f = XFRAME (w->frame); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4854 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4855 if (updated_row->full_width_p) |
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 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
|
4858 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
|
4859 && !w->pseudo_window_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4860 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
|
4861 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4862 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4863 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
|
4864 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
|
4865 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4866 /* 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
|
4867 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
|
4868 if (to_x == 0) |
286 | 4869 return; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4870 else if (to_x < 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4871 to_x = max_x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4872 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4873 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
|
4874 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4875 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
|
4876 |
429 | 4877 /* 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
|
4878 if (!updated_row->full_width_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4879 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
|
4880 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4881 from_x = output_cursor.x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4882 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4883 /* Translate to frame coordinates. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4884 if (updated_row->full_width_p) |
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 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
|
4887 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
|
4888 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4889 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4890 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4891 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
|
4892 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
|
4893 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4894 |
25546 | 4895 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
|
4896 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
|
4897 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
|
4898 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4899 /* 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
|
4900 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
|
4901 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4902 BLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4903 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
|
4904 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
|
4905 False); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4906 UNBLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4907 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4908 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4909 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4910 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4911 /* 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
|
4912 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
|
4913 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4914 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4915 x_clear_frame () |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4916 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4917 struct frame *f; |
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 if (updating_frame) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4920 f = updating_frame; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4921 else |
25682
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
4922 f = SELECTED_FRAME (); |
771 | 4923 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4924 /* 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
|
4925 longer visible. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4926 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
|
4927 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
|
4928 output_cursor.x = -1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4929 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4930 /* 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
|
4931 follow an explicit cursor_to. */ |
286 | 4932 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
|
4933 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
|
4934 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
4935 /* 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
|
4936 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
|
4937 x_scroll_bar_clear (f); |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4938 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
4939 XFlush (FRAME_X_DISPLAY (f)); |
286 | 4940 UNBLOCK_INPUT; |
4941 } | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4942 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4943 |
6791
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
4944 |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4945 /* 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
|
4946 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4947 /* 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
|
4948 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
|
4949 |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4950 #if defined (HAVE_TIMEVAL) && defined (HAVE_SELECT) |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4953 /* 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
|
4954 *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
|
4955 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4956 static int |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4957 timeval_subtract (result, x, y) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4958 struct timeval *result, x, y; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4959 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4960 /* 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
|
4961 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
|
4962 if (x.tv_usec < y.tv_usec) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4963 { |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4964 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
|
4965 y.tv_usec -= 1000000 * nsec; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4966 y.tv_sec += nsec; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4967 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4968 |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4969 if (x.tv_usec - y.tv_usec > 1000000) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4970 { |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4971 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
|
4972 y.tv_usec += 1000000 * nsec; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4973 y.tv_sec -= nsec; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4974 } |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4975 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4976 /* 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
|
4977 positive. */ |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4978 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
|
4979 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
|
4980 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4981 /* 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
|
4982 negative. */ |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4983 return x.tv_sec < y.tv_sec; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4984 } |
286 | 4985 |
21514 | 4986 void |
771 | 4987 XTflash (f) |
4988 struct frame *f; | |
286 | 4989 { |
4990 BLOCK_INPUT; | |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4991 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4992 { |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4993 GC gc; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4994 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4995 /* 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
|
4996 pixels into background pixels. */ |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4997 { |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4998 XGCValues values; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4999 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5000 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
|
5001 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
|
5002 ^ f->output_data.x->background_pixel); |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
5003 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5004 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
|
5005 GCFunction | GCForeground, &values); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5006 } |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5007 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5008 { |
16352
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5009 /* 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
|
5010 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
|
5011 /* 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
|
5012 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
|
5013 /* 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
|
5014 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
|
5015 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
|
5016 |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5017 int width; |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5018 |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5019 /* 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
|
5020 edge it is next to. */ |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5021 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
|
5022 { |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5023 case vertical_scroll_bar_left: |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5024 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
|
5025 break; |
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 case vertical_scroll_bar_right: |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5028 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
|
5029 break; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5030 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5031 default: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5032 break; |
16352
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5033 } |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5034 |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5035 width = flash_right - flash_left; |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5036 |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5037 /* 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
|
5038 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
|
5039 { |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5040 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
|
5041 flash_left, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5042 (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
|
5043 + 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
|
5044 width, flash_height); |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5045 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
|
5046 flash_left, |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5047 (height - flash_height |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5048 - FRAME_INTERNAL_BORDER_WIDTH (f)), |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5049 width, flash_height); |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5050 } |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5051 else |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5052 /* 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
|
5053 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
|
5054 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
|
5055 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
|
5056 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5057 x_flush (f); |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5058 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5059 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5060 struct timeval wakeup; |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5061 |
5362
d1fa597d923d
(XTflush): FIx typo in last change.
Richard M. Stallman <rms@gnu.org>
parents:
5357
diff
changeset
|
5062 EMACS_GET_TIME (wakeup); |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5063 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5064 /* 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
|
5065 wakeup.tv_usec += 150000; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5066 wakeup.tv_sec += (wakeup.tv_usec / 1000000); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5067 wakeup.tv_usec %= 1000000; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5068 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5069 /* Keep waiting until past the time wakeup. */ |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5070 while (1) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5071 { |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5072 struct timeval timeout; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5073 |
5362
d1fa597d923d
(XTflush): FIx typo in last change.
Richard M. Stallman <rms@gnu.org>
parents:
5357
diff
changeset
|
5074 EMACS_GET_TIME (timeout); |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5075 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5076 /* In effect, timeout = wakeup - timeout. |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5077 Break if result would be negative. */ |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5078 if (timeval_subtract (&timeout, wakeup, timeout)) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5079 break; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5080 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5081 /* 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
|
5082 select (0, NULL, NULL, NULL, &timeout); |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5083 } |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5084 } |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
5085 |
16352
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5086 /* 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
|
5087 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
|
5088 { |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5089 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
|
5090 flash_left, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5091 (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
|
5092 + 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
|
5093 width, flash_height); |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5094 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
|
5095 flash_left, |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5096 (height - flash_height |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5097 - FRAME_INTERNAL_BORDER_WIDTH (f)), |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5098 width, flash_height); |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5099 } |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5100 else |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5101 /* 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
|
5102 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
|
5103 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
|
5104 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
|
5105 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5106 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
|
5107 x_flush (f); |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5108 } |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5109 } |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5110 |
286 | 5111 UNBLOCK_INPUT; |
5112 } | |
5113 | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5114 #endif /* defined (HAVE_TIMEVAL) && defined (HAVE_SELECT) */ |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5115 |
286 | 5116 |
5117 /* Make audible bell. */ | |
5118 | |
21514 | 5119 void |
286 | 5120 XTring_bell () |
5121 { | |
25682
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5122 struct frame *f = SELECTED_FRAME (); |
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5123 |
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5124 if (FRAME_X_DISPLAY (f)) |
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5125 { |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5126 #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
|
5127 if (visible_bell) |
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5128 XTflash (f); |
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5129 else |
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5130 #endif |
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5131 { |
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5132 BLOCK_INPUT; |
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5133 XBell (FRAME_X_DISPLAY (f), 0); |
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5134 XFlush (FRAME_X_DISPLAY (f)); |
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5135 UNBLOCK_INPUT; |
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5136 } |
286 | 5137 } |
5138 } | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5139 |
286 | 5140 |
5141 /* Specify how many text lines, from the top of the window, | |
5142 should be affected by insert-lines and delete-lines operations. | |
5143 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
|
5144 that is bounded by calls to x_update_begin and x_update_end. */ |
286 | 5145 |
21514 | 5146 static void |
286 | 5147 XTset_terminal_window (n) |
5148 register int n; | |
5149 { | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5150 /* This function intentionally left blank. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5151 } |
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 |
286 | 5154 |
24991
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 Line Dance |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5157 ***********************************************************************/ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5158 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5159 /* 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
|
5160 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
|
5161 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5162 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5163 x_ins_del_lines (vpos, n) |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
5164 int vpos, n; |
286 | 5165 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5166 abort (); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5167 } |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5170 /* 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
|
5171 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5172 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5173 x_scroll_run (w, run) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5174 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5175 struct run *run; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5176 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5177 struct frame *f = XFRAME (w->frame); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5178 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
|
5179 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5180 /* 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
|
5181 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
|
5182 left and right of W. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5183 window_box (w, -1, &x, &y, &width, &height); |
25465 | 5184 width += FRAME_X_FLAGS_AREA_WIDTH (f); |
5185 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
|
5186 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5187 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
|
5188 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
|
5189 bottom_y = y + height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5190 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5191 if (to_y < from_y) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5192 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5193 /* 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
|
5194 line at the bottom. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5195 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
|
5196 height = bottom_y - from_y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5197 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5198 height = run->height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5199 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5200 else |
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 /* 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
|
5203 at the bottom. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5204 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
|
5205 height = bottom_y - to_y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5206 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5207 height = run->height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5208 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5209 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5210 BLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5211 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5212 /* 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
|
5213 updated_window = w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5214 x_clear_cursor (w); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5215 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5216 XCopyArea (FRAME_X_DISPLAY (f), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5217 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
|
5218 f->output_data.x->normal_gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5219 x, from_y, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5220 width, height, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5221 x, to_y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5222 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5223 UNBLOCK_INPUT; |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5226 |
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 Exposure Events |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5230 ***********************************************************************/ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5231 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5232 /* 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
|
5233 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
|
5234 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
|
5235 the entire frame. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5236 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5237 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5238 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
|
5239 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5240 int x, y, w, h; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5241 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5242 XRectangle r; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5243 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5244 TRACE ((stderr, "expose_frame ")); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5245 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5246 /* 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
|
5247 if (FRAME_GARBAGED_P (f)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5248 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5249 TRACE ((stderr, " garbaged\n")); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5250 return; |
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 /* 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
|
5254 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
|
5255 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
|
5256 if (FRAME_FACE_CACHE (f) == NULL |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5257 || 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
|
5258 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5259 TRACE ((stderr, " no faces\n")); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5260 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5261 } |
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 if (w == 0 || h == 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5264 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5265 r.x = r.y = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5266 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
|
5267 r.height = CANON_Y_UNIT (f) * f->height; |
286 | 5268 } |
5269 else | |
5270 { | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5271 r.x = x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5272 r.y = y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5273 r.width = w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5274 r.height = h; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5275 } |
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 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
|
5278 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
|
5279 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
5280 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
|
5281 { |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
5282 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
|
5283 XRectangle window_rect; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5284 XRectangle intersection_rect; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5285 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
|
5286 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5287 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5288 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
|
5289 window_rect.x = window_x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5290 window_rect.y = window_y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5291 window_rect.width = window_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5292 window_rect.height = window_height; |
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 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
|
5295 expose_window (w, &intersection_rect); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5296 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5297 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5298 #ifndef USE_X_TOOLKIT |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5299 if (WINDOWP (f->menu_bar_window)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5300 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5301 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
|
5302 XRectangle window_rect; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5303 XRectangle intersection_rect; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5304 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
|
5305 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5306 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5307 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
|
5308 window_rect.x = window_x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5309 window_rect.y = window_y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5310 window_rect.width = window_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5311 window_rect.height = window_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5312 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5313 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
|
5314 expose_window (w, &intersection_rect); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5315 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5316 #endif /* not USE_X_TOOLKIT */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5317 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5318 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5319 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5320 /* 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
|
5321 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
|
5322 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5323 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5324 expose_window_tree (w, r) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5325 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5326 XRectangle *r; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5327 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5328 while (w) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5329 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5330 if (!NILP (w->hchild)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5331 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
|
5332 else if (!NILP (w->vchild)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5333 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
|
5334 else |
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 XRectangle window_rect; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5337 XRectangle intersection_rect; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5338 struct frame *f = XFRAME (w->frame); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5339 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
|
5340 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5341 /* Frame-relative pixel rectangle of W. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5342 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
|
5343 &window_height); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5344 window_rect.x |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5345 = (window_x |
25465 | 5346 - 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
|
5347 - 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
|
5348 window_rect.y = window_y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5349 window_rect.width |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5350 = (window_width |
25465 | 5351 + 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
|
5352 + 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
|
5353 window_rect.height |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5354 = 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
|
5355 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5356 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
|
5357 expose_window (w, &intersection_rect); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5358 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5359 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5360 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
|
5361 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5362 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5363 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5364 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5365 /* 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
|
5366 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
|
5367 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5368 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5369 expose_area (w, row, r, area) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5370 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5371 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5372 XRectangle *r; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5373 enum glyph_row_area area; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5374 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5375 int x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5376 struct glyph *first = row->glyphs[area]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5377 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
|
5378 struct glyph *last; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5379 int first_x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5380 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5381 /* 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
|
5382 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
|
5383 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
|
5384 if (area == LEFT_MARGIN_AREA) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5385 x = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5386 else if (area == TEXT_AREA) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5387 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
|
5388 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5389 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
|
5390 + window_box_width (w, TEXT_AREA)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5391 |
25306
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5392 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
|
5393 /* 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
|
5394 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
|
5395 0, row->used[area], |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5396 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
|
5397 NULL, NULL, 0); |
25306
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5398 else |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5399 { |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5400 /* 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
|
5401 while (first < end |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5402 && 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
|
5403 { |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5404 x += first->pixel_width; |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5405 ++first; |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5406 } |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5407 |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5408 /* Find the last one. */ |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5409 last = first; |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5410 first_x = x; |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5411 while (last < end |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5412 && 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
|
5413 { |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5414 x += last->pixel_width; |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5415 ++last; |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5416 } |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5417 |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5418 /* Repaint. */ |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5419 if (last > first) |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5420 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
|
5421 first - row->glyphs[area], |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5422 last - row->glyphs[area], |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5423 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
|
5424 NULL, NULL, 0); |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5425 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5426 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5427 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5428 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5429 /* 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
|
5430 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
|
5431 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5432 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5433 expose_line (w, row, r) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5434 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5435 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5436 XRectangle *r; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5437 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5438 xassert (row->enabled_p); |
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 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
|
5441 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
|
5442 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
|
5443 NULL, NULL, 0); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5444 else |
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 if (row->used[LEFT_MARGIN_AREA]) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5447 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
|
5448 if (row->used[TEXT_AREA]) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5449 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
|
5450 if (row->used[RIGHT_MARGIN_AREA]) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5451 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
|
5452 x_draw_row_bitmaps (w, row); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5453 } |
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 /* 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
|
5458 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5459 static int |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5460 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
|
5461 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5462 XRectangle *r; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5463 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5464 XRectangle cr, result; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5465 struct glyph *cursor_glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5466 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5467 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
|
5468 if (cursor_glyph) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5469 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5470 cr.x = w->phys_cursor.x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5471 cr.y = w->phys_cursor.y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5472 cr.width = cursor_glyph->pixel_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5473 cr.height = w->phys_cursor_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5474 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
|
5475 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5476 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5477 return 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5478 } |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5481 /* 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
|
5482 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
|
5483 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5484 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5485 expose_window (w, r) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5486 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5487 XRectangle *r; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5488 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5489 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5490 int y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5491 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
|
5492 int cursor_cleared_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5493 |
25529
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
5494 /* 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
|
5495 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
|
5496 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
|
5497 created window. */ |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
5498 if (w->current_matrix == NULL) |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
5499 return; |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
5500 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5501 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
|
5502 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
|
5503 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5504 /* Convert to window coordinates. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5505 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
|
5506 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
|
5507 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5508 /* Turn off the cursor. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5509 if (!w->pseudo_window_p |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5510 && 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
|
5511 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5512 x_clear_cursor (w); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5513 cursor_cleared_p = 1; |
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 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5516 cursor_cleared_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5517 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5518 /* 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
|
5519 row = w->current_matrix->rows; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5520 y = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5521 while (row->enabled_p |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5522 && y < yb |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5523 && y + row->height < r->y) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5524 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5525 y += row->height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5526 ++row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5527 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5528 |
286 | 5529 /* 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
|
5530 while (row->enabled_p |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5531 && y < yb |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5532 && y < r->y + r->height) |
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 expose_line (w, row, r); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5535 y += row->height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5536 ++row; |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5539 /* 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
|
5540 if (WINDOW_WANTS_MODELINE_P (w) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5541 && (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
|
5542 row->enabled_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5543 && row->y < r->y + r->height) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5544 expose_line (w, row, r); |
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 if (!w->pseudo_window_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5547 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5548 /* Draw border between windows. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5549 x_draw_vertical_border (w); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5550 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5551 /* Turn the cursor on again. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5552 if (cursor_cleared_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5553 x_update_window_cursor (w, 1); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5554 } |
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 |
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 /* 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
|
5559 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
|
5560 empty. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5561 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5562 static int |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5563 x_intersect_rectangles (r1, r2, result) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5564 XRectangle *r1, *r2, *result; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5565 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5566 XRectangle *left, *right; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5567 XRectangle *upper, *lower; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5568 int intersection_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5569 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5570 /* 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
|
5571 if (r1->x < r2->x) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5572 left = r1, right = r2; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5573 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5574 left = r2, right = r1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5575 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5576 /* 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
|
5577 otherwise there is no intersection. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5578 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
|
5579 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5580 result->x = right->x; |
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 /* 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
|
5583 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
|
5584 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
|
5585 - result->x); |
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 /* Same game for Y. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5588 if (r1->y < r2->y) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5589 upper = r1, lower = r2; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5590 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5591 upper = r2, lower = r1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5592 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5593 /* 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
|
5594 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
|
5595 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
|
5596 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5597 result->y = lower->y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5598 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5599 /* 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
|
5600 ends of upper and lower. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5601 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
|
5602 upper->y + upper->height) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5603 - result->y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5604 intersection_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5605 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5606 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5607 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5608 return intersection_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5609 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5610 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5611 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5612 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5613 |
286 | 5614 |
5615 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
|
5616 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
|
5617 struct frame *f; |
286 | 5618 { |
3943
cbdf67dd68d0
* xterm.c (frame_highlight, frame_unhighlight): Don't test
Jim Blandy <jimb@redhat.com>
parents:
3938
diff
changeset
|
5619 /* 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
|
5620 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
|
5621 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
|
5622 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
|
5623 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
|
5624 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
|
5625 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
|
5626 UNBLOCK_INPUT; |
12431
80a5aedfb4c7
(XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents:
12192
diff
changeset
|
5627 x_update_cursor (f, 1); |
286 | 5628 } |
5629 | |
5630 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
|
5631 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
|
5632 struct frame *f; |
286 | 5633 { |
3943
cbdf67dd68d0
* xterm.c (frame_highlight, frame_unhighlight): Don't test
Jim Blandy <jimb@redhat.com>
parents:
3938
diff
changeset
|
5634 /* 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
|
5635 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
|
5636 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
|
5637 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
|
5638 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
|
5639 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
|
5640 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
|
5641 UNBLOCK_INPUT; |
12431
80a5aedfb4c7
(XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents:
12192
diff
changeset
|
5642 x_update_cursor (f, 1); |
286 | 5643 } |
5644 | |
771 | 5645 /* The focus has changed. Update the frames as necessary to reflect |
5646 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
|
5647 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
|
5648 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
|
5649 Lisp code can tell when the switch took place by examining the events. */ |
369 | 5650 |
5651 static void | |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5652 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
|
5653 struct x_display_info *dpyinfo; |
771 | 5654 struct frame *frame; |
286 | 5655 { |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5656 struct frame *old_focus = dpyinfo->x_focus_frame; |
286 | 5657 |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5658 if (frame != dpyinfo->x_focus_frame) |
286 | 5659 { |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
5660 /* Set this before calling other routines, so that they see |
771 | 5661 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
|
5662 dpyinfo->x_focus_frame = frame; |
369 | 5663 |
5664 if (old_focus && old_focus->auto_lower) | |
771 | 5665 x_lower_frame (old_focus); |
286 | 5666 |
5667 #if 0 | |
771 | 5668 selected_frame = frame; |
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
5669 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
|
5670 selected_frame); |
771 | 5671 Fselect_window (selected_frame->selected_window); |
5672 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
|
5673 #endif /* ! 0 */ |
286 | 5674 |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5675 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
|
5676 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
|
5677 else |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
5678 pending_autoraise_frame = 0; |
369 | 5679 } |
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 (dpyinfo); |
369 | 5682 } |
5683 | |
10223
97fc8c6b4a74
(XTupdate_begin): Discard records of prior mouse highlight
Richard M. Stallman <rms@gnu.org>
parents:
9823
diff
changeset
|
5684 /* 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
|
5685 |
97fc8c6b4a74
(XTupdate_begin): Discard records of prior mouse highlight
Richard M. Stallman <rms@gnu.org>
parents:
9823
diff
changeset
|
5686 void |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5687 x_mouse_leave (dpyinfo) |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5688 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
|
5689 { |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5690 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
|
5691 } |
369 | 5692 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
5693 /* 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
|
5694 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
|
5695 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
|
5696 |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5697 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
|
5698 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
|
5699 the appropriate X display info. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5700 |
369 | 5701 static void |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5702 XTframe_rehighlight (frame) |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5703 struct frame *frame; |
369 | 5704 { |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5705 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
|
5706 } |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5707 |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5708 static void |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5709 x_frame_rehighlight (dpyinfo) |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5710 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
|
5711 { |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5712 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
|
5713 |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5714 if (dpyinfo->x_focus_frame) |
286 | 5715 { |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5716 dpyinfo->x_highlight_frame |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5717 = ((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
|
5718 ? 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
|
5719 : dpyinfo->x_focus_frame); |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5720 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
|
5721 { |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5722 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
|
5723 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
|
5724 } |
286 | 5725 } |
369 | 5726 else |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5727 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
|
5728 |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5729 if (dpyinfo->x_highlight_frame != old_highlight) |
369 | 5730 { |
5731 if (old_highlight) | |
771 | 5732 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
|
5733 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
|
5734 frame_highlight (dpyinfo->x_highlight_frame); |
369 | 5735 } |
286 | 5736 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5737 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5738 |
286 | 5739 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5740 /* Keyboard processing - modifier keys, vendor-specific keysyms, etc. */ |
286 | 5741 |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5742 /* 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
|
5743 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
|
5744 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
|
5745 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
|
5746 { |
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5747 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
|
5748 KeySym *syms; |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5749 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
|
5750 XModifierKeymap *mods; |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5751 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5752 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
|
5753 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
|
5754 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
|
5755 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
|
5756 dpyinfo->hyper_mod_mask = 0; |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
5757 |
2127
adaf588e32a6
* xterm.c (x_find_modifier_meanings): XDisplayKeycodes only
Jim Blandy <jimb@redhat.com>
parents:
2064
diff
changeset
|
5758 #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
|
5759 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
|
5760 #else |
13884
26245345f6f1
(x_find_modifier_meanings): Fix !X11R4 code to use dpyinfo.
Richard M. Stallman <rms@gnu.org>
parents:
13782
diff
changeset
|
5761 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
|
5762 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
|
5763 #endif |
adaf588e32a6
* xterm.c (x_find_modifier_meanings): XDisplayKeycodes only
Jim Blandy <jimb@redhat.com>
parents:
2064
diff
changeset
|
5764 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5765 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
|
5766 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
|
5767 &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
|
5768 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
|
5769 |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
5770 /* 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
|
5771 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
|
5772 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5773 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
|
5774 |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5775 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
|
5776 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
|
5777 { |
10287
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
5778 KeyCode code |
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
5779 = 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
|
5780 |
6560
a071babfa9ea
(x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents:
6521
diff
changeset
|
5781 /* Zeroes are used for filler. Skip them. */ |
a071babfa9ea
(x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents:
6521
diff
changeset
|
5782 if (code == 0) |
a071babfa9ea
(x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents:
6521
diff
changeset
|
5783 continue; |
a071babfa9ea
(x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents:
6521
diff
changeset
|
5784 |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5785 /* 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
|
5786 { |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5787 int code_col; |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5788 |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5789 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
|
5790 { |
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5791 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
|
5792 |
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5793 switch (sym) |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5794 { |
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5795 case XK_Meta_L: |
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5796 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
|
5797 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
|
5798 break; |
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5799 |
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5800 case XK_Alt_L: |
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5801 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
|
5802 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
|
5803 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
|
5804 |
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
|
5805 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
|
5806 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
|
5807 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
|
5808 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
|
5809 |
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
|
5810 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
|
5811 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
|
5812 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
|
5813 break; |
1436
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
5814 |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
5815 case XK_Shift_Lock: |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
5816 /* 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
|
5817 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
|
5818 dpyinfo->shift_lock_mask = LockMask; |
1436
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
5819 break; |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5820 } |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5821 } |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5822 } |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5823 } |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5824 } |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5825 |
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5826 /* 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
|
5827 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
|
5828 { |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5829 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
|
5830 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
|
5831 } |
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5832 |
2923
c8997402dd6b
(x_find_modifier_meanings): If some keys are meta and alt,
Richard M. Stallman <rms@gnu.org>
parents:
2882
diff
changeset
|
5833 /* 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
|
5834 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
|
5835 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
|
5836 { |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5837 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
|
5838 } |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
5839 |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5840 XFree ((char *) syms); |
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5841 XFreeModifiermap (mods); |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5842 } |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5843 |
2661
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
5844 /* 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
|
5845 Emacs uses. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5846 |
1530
a7f8a1fe258e
* xterm.c (x_convert_modifiers): Declare this to return an
Jim Blandy <jimb@redhat.com>
parents:
1436
diff
changeset
|
5847 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
|
5848 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
|
5849 struct x_display_info *dpyinfo; |
286 | 5850 unsigned int state; |
5851 { | |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5852 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
|
5853 | ((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
|
5854 | ((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
|
5855 | ((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
|
5856 | ((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
|
5857 | ((state & dpyinfo->hyper_mod_mask) ? hyper_modifier : 0)); |
286 | 5858 } |
5859 | |
2661
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
5860 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
|
5861 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
|
5862 struct x_display_info *dpyinfo; |
2661
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
5863 unsigned int state; |
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
5864 { |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5865 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
|
5866 | ((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
|
5867 | ((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
|
5868 | ((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
|
5869 | ((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
|
5870 | ((state & meta_modifier) ? dpyinfo->meta_mod_mask : 0)); |
2661
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
5871 } |
12172
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5872 |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5873 /* Convert a keysym to its name. */ |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5874 |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5875 char * |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5876 x_get_keysym_name (keysym) |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5877 KeySym keysym; |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5878 { |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5879 char *value; |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5880 |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5881 BLOCK_INPUT; |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5882 value = XKeysymToString (keysym); |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5883 UNBLOCK_INPUT; |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5884 |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5885 return value; |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5886 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5887 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5888 |
3585
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5889 |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5890 /* Mouse clicks and mouse movement. Rah. */ |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5891 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5892 /* 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
|
5893 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
|
5894 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
|
5895 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
|
5896 |
6023
67aa546e4ff1
(construct_menu_click): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents:
6022
diff
changeset
|
5897 void |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5898 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
|
5899 FRAME_PTR f; |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5900 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
|
5901 register int *x, *y; |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5902 XRectangle *bounds; |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5903 int noclip; |
3585
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5904 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5905 /* 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
|
5906 even for negative values. */ |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5907 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
|
5908 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
|
5909 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
|
5910 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
|
5911 |
3585
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5912 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
|
5913 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
|
5914 |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5915 if (bounds) |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5916 { |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
5917 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
|
5918 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
|
5919 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
|
5920 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
|
5921 } |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5922 |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5923 if (!noclip) |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5924 { |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5925 if (pix_x < 0) |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5926 pix_x = 0; |
16301
a02555b4b2b9
(x_scroll_bar_create, x_scroll_bar_move):
Richard M. Stallman <rms@gnu.org>
parents:
16251
diff
changeset
|
5927 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
|
5928 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
|
5929 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5930 if (pix_y < 0) |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5931 pix_y = 0; |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5932 else if (pix_y > f->height) |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5933 pix_y = f->height; |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5934 } |
3585
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5935 |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5936 *x = pix_x; |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5937 *y = pix_y; |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5938 } |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5939 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5940 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5941 /* 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
|
5942 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
|
5943 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
|
5944 return 0. */ |
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 int |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5947 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
|
5948 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5949 int hpos, vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5950 int *frame_x, *frame_y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5951 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5952 int success_p; |
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 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
|
5955 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
|
5956 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5957 if (display_completed) |
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 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
|
5960 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
|
5961 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
|
5962 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5963 *frame_y = row->y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5964 *frame_x = row->x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5965 while (glyph < end) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5966 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5967 *frame_x += glyph->pixel_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5968 ++glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5969 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5970 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5971 success_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5972 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5973 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5974 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5975 *frame_y = *frame_x = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5976 success_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5977 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5978 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5979 *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
|
5980 *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
|
5981 return success_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5982 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5983 |
6055
a9f61727a90c
(construct_mouse_click): Don't convert to glyph units.
Richard M. Stallman <rms@gnu.org>
parents:
6023
diff
changeset
|
5984 |
286 | 5985 /* Prepare a mouse-event in *RESULT for placement in the input queue. |
5986 | |
5987 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
|
5988 the mouse. */ |
286 | 5989 |
5990 static Lisp_Object | |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
5991 construct_mouse_click (result, event, f) |
286 | 5992 struct input_event *result; |
5993 XButtonEvent *event; | |
771 | 5994 struct frame *f; |
286 | 5995 { |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
5996 /* Make the event type no_event; we'll change that when we decide |
286 | 5997 otherwise. */ |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
5998 result->kind = mouse_click; |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5999 result->code = event->button - Button1; |
708 | 6000 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
|
6001 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
|
6002 event->state) |
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
6003 | (event->type == ButtonRelease |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
6004 ? up_modifier |
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
6005 : down_modifier)); |
286 | 6006 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6007 XSETINT (result->x, event->x); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6008 XSETINT (result->y, event->y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6009 XSETFRAME (result->frame_or_window, f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6010 return Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6011 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6012 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6013 #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
|
6014 |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
6015 /* 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
|
6016 |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
6017 static Lisp_Object |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
6018 construct_menu_click (result, event, f) |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
6019 struct input_event *result; |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
6020 XButtonEvent *event; |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
6021 struct frame *f; |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
6022 { |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
6023 /* 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
|
6024 otherwise. */ |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
6025 result->kind = mouse_click; |
17371
97283cd93432
(construct_menu_click, note_mouse_highlight, fast_find_position):
Karl Heuer <kwzh@gnu.org>
parents:
17316
diff
changeset
|
6026 result->code = event->button - Button1; |
6022
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
6027 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
|
6028 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
|
6029 event->state) |
6022
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
6030 | (event->type == ButtonRelease |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
6031 ? up_modifier |
6022
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
6032 : down_modifier)); |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
6033 |
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
6034 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
|
6035 XSETINT (result->y, -1); |
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
6036 XSETFRAME (result->frame_or_window, f); |
6022
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
6037 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6038 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6039 #endif /* 0 */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6040 |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6041 |
429 | 6042 /* Function to report a mouse movement to the mainstream Emacs code. |
6043 The input handler calls this. | |
6044 | |
6045 We have received a mouse movement event, which is given in *event. | |
6046 If the mouse is over a different glyph than it was last time, tell | |
6047 the mainstream emacs code by setting mouse_moved. If not, ask for | |
6048 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
|
6049 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6050 static XMotionEvent last_mouse_motion_event; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6051 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
|
6052 |
429 | 6053 static void |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6054 note_mouse_movement (frame, event) |
771 | 6055 FRAME_PTR frame; |
429 | 6056 XMotionEvent *event; |
6057 { | |
732 | 6058 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
|
6059 last_mouse_motion_event = *event; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6060 XSETFRAME (last_mouse_motion_frame, frame); |
732 | 6061 |
7680
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
6062 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
|
6063 { |
12530
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
6064 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
|
6065 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
|
6066 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
|
6067 } |
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
6068 |
429 | 6069 /* 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
|
6070 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
|
6071 || 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
|
6072 || 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
|
6073 || 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
|
6074 { |
12530
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
6075 frame->mouse_moved = 1; |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
6076 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
|
6077 note_mouse_highlight (frame, event->x, event->y); |
429 | 6078 } |
6079 } | |
6080 | |
6644
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
6081 /* 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
|
6082 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6083 int disable_mouse_highlight; |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6086 |
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 Mouse Face |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6089 ************************************************************************/ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6090 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6091 /* 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
|
6092 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
|
6093 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
|
6094 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
|
6095 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
|
6096 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
|
6097 date. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6098 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6099 static struct glyph * |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6100 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
|
6101 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6102 int x, y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6103 int *hpos, *vpos, *area; |
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 struct glyph *glyph, *end; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6106 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6107 int x0, i, left_area_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6108 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6109 /* 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
|
6110 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
|
6111 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6112 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
|
6113 if (!row->enabled_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6114 return NULL; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6115 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
|
6116 break; |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6119 *vpos = i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6120 *hpos = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6121 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6122 /* 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
|
6123 if (i == w->current_matrix->nrows) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6124 return NULL; |
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 /* Get the glyph area containing X. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6127 if (w->pseudo_window_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6128 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6129 *area = TEXT_AREA; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6130 x0 = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6131 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6132 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6133 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6134 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
|
6135 if (x < left_area_width) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6136 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6137 *area = LEFT_MARGIN_AREA; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6138 x0 = 0; |
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 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
|
6141 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6142 *area = TEXT_AREA; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6143 x0 = row->x + left_area_width; |
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 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6146 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6147 *area = RIGHT_MARGIN_AREA; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6148 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
|
6149 } |
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 /* Find glyph containing X. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6153 glyph = row->glyphs[*area]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6154 end = glyph + row->used[*area]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6155 while (glyph < end) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6156 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6157 if (x < x0 + glyph->pixel_width) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6158 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6159 if (w->pseudo_window_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6160 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6161 else if (BUFFERP (glyph->object)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6162 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6163 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6164 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6165 x0 += glyph->pixel_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6166 ++glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6167 } |
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 if (glyph == end) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6170 return NULL; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6171 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6172 *hpos = glyph - row->glyphs[*area]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6173 return glyph; |
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 /* 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
|
6178 Takes pseudo-windows into account. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6179 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6180 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6181 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
|
6182 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6183 int *x, *y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6184 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6185 if (w->pseudo_window_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6186 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6187 /* 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
|
6188 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
|
6189 struct frame *f = XFRAME (w->frame); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6190 *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
|
6191 *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
|
6192 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6193 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6194 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6195 *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
|
6196 *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
|
6197 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6198 } |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6201 /* 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
|
6202 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
|
6203 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
|
6204 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
|
6205 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
|
6206 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6207 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6208 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
|
6209 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6210 int x, mode_line_p; |
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 struct frame *f = XFRAME (w->frame); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6213 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
|
6214 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
|
6215 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6216 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6217 if (mode_line_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6218 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
|
6219 else |
25546 | 6220 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
|
6221 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6222 if (row->enabled_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6223 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6224 struct glyph *glyph, *end; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6225 Lisp_Object help, map; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6226 int x0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6227 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6228 /* Find the glyph under X. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6229 glyph = row->glyphs[TEXT_AREA]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6230 end = glyph + row->used[TEXT_AREA]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6231 x0 = - (FRAME_LEFT_SCROLL_BAR_WIDTH (f) * CANON_X_UNIT (f) |
25465 | 6232 + 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
|
6233 while (glyph < end |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6234 && x >= x0 + glyph->pixel_width) |
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 x0 += glyph->pixel_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6237 ++glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6238 } |
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 if (glyph < end |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6241 && STRINGP (glyph->object) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6242 && XSTRING (glyph->object)->intervals |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6243 && glyph->charpos >= 0 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6244 && glyph->charpos < XSTRING (glyph->object)->size) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6245 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6246 /* 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
|
6247 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
|
6248 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
|
6249 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
|
6250 Qhelp_echo, glyph->object); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6251 if (STRINGP (help)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6252 help_echo = help; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6253 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6254 /* 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
|
6255 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
|
6256 Qlocal_map, glyph->object); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6257 if (!NILP (Fkeymapp (map))) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6258 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
|
6259 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6260 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6261 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6262 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
|
6263 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6264 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6265 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6266 /* 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
|
6267 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
|
6268 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
|
6269 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
|
6270 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6271 static void |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6272 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
|
6273 struct frame *f; |
11915
e2ab839155e1
(XTflash): Use pointers as args to select.
Karl Heuer <kwzh@gnu.org>
parents:
11904
diff
changeset
|
6274 int x, y; |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6275 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6276 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
|
6277 int portion; |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6278 Lisp_Object window; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6279 struct window *w; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6280 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6281 /* 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
|
6282 #ifdef USE_X_TOOLKIT |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6283 if (popup_activated ()) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6284 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6285 #endif |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6286 |
27967
7d61ff2d1530
(note_mouse_highlight): Return quickly if frame's
Gerd Moellmann <gerd@gnu.org>
parents:
27962
diff
changeset
|
6287 if (disable_mouse_highlight |
7d61ff2d1530
(note_mouse_highlight): Return quickly if frame's
Gerd Moellmann <gerd@gnu.org>
parents:
27962
diff
changeset
|
6288 || !f->glyphs_initialized_p) |
6644
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
6289 return; |
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
6290 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6291 dpyinfo->mouse_face_mouse_x = x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6292 dpyinfo->mouse_face_mouse_y = y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6293 dpyinfo->mouse_face_mouse_frame = f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6294 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6295 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
|
6296 return; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6297 |
6660
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
6298 if (gc_in_progress) |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
6299 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6300 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
|
6301 return; |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
6302 } |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
6303 |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6304 /* Which window is that in? */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6305 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
|
6306 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6307 /* 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
|
6308 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
|
6309 clear_mouse_face (dpyinfo); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6310 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6311 /* Not on a window -> return. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6312 if (!WINDOWP (window)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6313 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6314 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6315 /* Convert to window-relative pixel coordinates. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6316 w = XWINDOW (window); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6317 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
|
6318 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6319 /* 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
|
6320 buffer. */ |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6321 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
|
6322 { |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6323 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
|
6324 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6325 } |
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 if (portion == 1 || portion == 3) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6328 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6329 /* 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
|
6330 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
|
6331 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6332 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6333 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6334 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
|
6335 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
|
6336 |
6791
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
6337 /* 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
|
6338 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
|
6339 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
|
6340 portion == 0 |
6791
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
6341 && 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
|
6342 && 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
|
6343 && (XFASTINT (w->last_overlay_modified) |
97283cd93432
(construct_menu_click, note_mouse_highlight, fast_find_position):
Karl Heuer <kwzh@gnu.org>
parents:
17316
diff
changeset
|
6344 == 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
|
6345 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6346 int hpos, vpos, pos, i, area; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6347 struct glyph *glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6348 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6349 /* Find the glyph under X/Y. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6350 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
|
6351 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6352 /* 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
|
6353 if (glyph == NULL |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6354 || area != TEXT_AREA |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6355 || !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
|
6356 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6357 clear_mouse_face (dpyinfo); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6358 return; |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6361 pos = glyph->charpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6362 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
|
6363 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6364 /* 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
|
6365 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6366 Lisp_Object mouse_face, overlay, position; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6367 Lisp_Object *overlay_vec; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6368 int len, noverlays; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6369 struct buffer *obuf; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6370 int obegv, ozv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6371 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6372 /* 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
|
6373 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
|
6374 return; |
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 /* 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
|
6377 overlays_at and compute_char_face. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6378 obuf = current_buffer; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6379 current_buffer = XBUFFER (w->buffer); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6380 obegv = BEGV; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6381 ozv = ZV; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6382 BEGV = BEG; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6383 ZV = Z; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6384 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6385 /* 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
|
6386 XSETINT (position, pos); |
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 /* 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
|
6389 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
|
6390 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
|
6391 len = 10; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6392 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
|
6393 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
|
6394 if (noverlays > len) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6395 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6396 len = noverlays; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6397 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
|
6398 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
|
6399 } |
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 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
|
6402 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6403 /* Check mouse-face highlighting. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6404 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
|
6405 && vpos >= dpyinfo->mouse_face_beg_row |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6406 && vpos <= dpyinfo->mouse_face_end_row |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6407 && (vpos > dpyinfo->mouse_face_beg_row |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6408 || hpos >= dpyinfo->mouse_face_beg_col) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6409 && (vpos < dpyinfo->mouse_face_end_row |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6410 || hpos < dpyinfo->mouse_face_end_col |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6411 || dpyinfo->mouse_face_past_end))) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6412 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6413 /* 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
|
6414 clear_mouse_face (dpyinfo); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6415 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6416 /* 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
|
6417 overlay = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6418 for (i = 0; i < noverlays; i++) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6419 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6420 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
|
6421 if (!NILP (mouse_face)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6422 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6423 overlay = overlay_vec[i]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6424 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6425 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6426 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6427 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6428 /* 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
|
6429 if (NILP (overlay)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6430 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
|
6431 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6432 /* Handle the overlay case. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6433 if (! NILP (overlay)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6434 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6435 /* 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
|
6436 should be active. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6437 Lisp_Object before, after; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6438 int ignore; |
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 before = Foverlay_start (overlay); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6441 after = Foverlay_end (overlay); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6442 /* 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
|
6443 fast_find_position (w, XFASTINT (before), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6444 &dpyinfo->mouse_face_beg_col, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6445 &dpyinfo->mouse_face_beg_row, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6446 &dpyinfo->mouse_face_beg_x, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6447 &dpyinfo->mouse_face_beg_y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6448 dpyinfo->mouse_face_past_end |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6449 = !fast_find_position (w, XFASTINT (after), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6450 &dpyinfo->mouse_face_end_col, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6451 &dpyinfo->mouse_face_end_row, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6452 &dpyinfo->mouse_face_end_x, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6453 &dpyinfo->mouse_face_end_y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6454 dpyinfo->mouse_face_window = window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6455 dpyinfo->mouse_face_face_id |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6456 = 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
|
6457 &ignore, pos + 1, 1); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6458 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6459 /* Display it as active. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6460 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
|
6461 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6462 /* Handle the text property case. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6463 else if (! NILP (mouse_face)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6464 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6465 /* 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
|
6466 should be active. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6467 Lisp_Object before, after, beginning, end; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6468 int ignore; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6469 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6470 beginning = Fmarker_position (w->start); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6471 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
|
6472 - XFASTINT (w->window_end_pos))); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6473 before |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6474 = 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
|
6475 Qmouse_face, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6476 w->buffer, beginning); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6477 after |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6478 = 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
|
6479 w->buffer, end); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6480 /* 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
|
6481 fast_find_position (w, XFASTINT (before), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6482 &dpyinfo->mouse_face_beg_col, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6483 &dpyinfo->mouse_face_beg_row, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6484 &dpyinfo->mouse_face_beg_x, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6485 &dpyinfo->mouse_face_beg_y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6486 dpyinfo->mouse_face_past_end |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6487 = !fast_find_position (w, XFASTINT (after), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6488 &dpyinfo->mouse_face_end_col, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6489 &dpyinfo->mouse_face_end_row, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6490 &dpyinfo->mouse_face_end_x, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6491 &dpyinfo->mouse_face_end_y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6492 dpyinfo->mouse_face_window = window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6493 dpyinfo->mouse_face_face_id |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6494 = 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
|
6495 &ignore, pos + 1, 1); |
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 /* Display it as active. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6498 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
|
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6502 /* Look for a `help-echo' property. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6503 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6504 Lisp_Object help; |
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 /* Check overlays first. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6507 help = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6508 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
|
6509 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
|
6510 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6511 /* Try text properties. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6512 if (!STRINGP (help) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6513 && ((STRINGP (glyph->object) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6514 && glyph->charpos >= 0 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6515 && glyph->charpos < XSTRING (glyph->object)->size) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6516 || (BUFFERP (glyph->object) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6517 && glyph->charpos >= BEGV |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6518 && glyph->charpos < ZV))) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6519 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
|
6520 Qhelp_echo, glyph->object); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6521 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6522 if (STRINGP (help)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6523 help_echo = help; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6524 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6525 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6526 BEGV = obegv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6527 ZV = ozv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6528 current_buffer = obuf; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6529 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6530 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6531 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6532 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6533 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6534 redo_mouse_highlight () |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6535 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6536 if (!NILP (last_mouse_motion_frame) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6537 && 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
|
6538 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
|
6539 last_mouse_motion_event.x, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6540 last_mouse_motion_event.y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6541 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6542 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6543 |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6544 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6545 /*********************************************************************** |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6546 Tool-bars |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6547 ***********************************************************************/ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6548 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6549 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
|
6550 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
|
6551 |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6552 /* 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
|
6553 or -1. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6554 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6555 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
|
6556 |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6557 |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6558 /* 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
|
6559 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
|
6560 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
|
6561 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
|
6562 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
|
6563 |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6564 -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
|
6565 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
|
6566 1 otherwise. */ |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6567 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6568 static int |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6569 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
|
6570 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6571 int x, y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6572 struct glyph **glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6573 int *hpos, *vpos, *prop_idx; |
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 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
|
6576 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
|
6577 int area; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6578 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6579 /* Find the glyph under X/Y. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6580 *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
|
6581 if (*glyph == NULL) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6582 return -1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6583 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6584 /* 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
|
6585 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
|
6586 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
|
6587 return -1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6588 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6589 /* 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
|
6590 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
|
6591 && *vpos >= dpyinfo->mouse_face_beg_row |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6592 && *vpos <= dpyinfo->mouse_face_end_row |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6593 && (*vpos > dpyinfo->mouse_face_beg_row |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6594 || *hpos >= dpyinfo->mouse_face_beg_col) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6595 && (*vpos < dpyinfo->mouse_face_end_row |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6596 || *hpos < dpyinfo->mouse_face_end_col |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6597 || dpyinfo->mouse_face_past_end)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6598 return 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6599 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6600 return 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6601 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6602 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6603 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6604 /* 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
|
6605 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
|
6606 or ButtonRelase. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6607 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6608 static void |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6609 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
|
6610 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6611 XButtonEvent *button_event; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6612 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6613 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
|
6614 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
|
6615 int hpos, vpos, prop_idx; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6616 struct glyph *glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6617 Lisp_Object enabled_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6618 int x = button_event->x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6619 int y = button_event->y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6620 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6621 /* 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
|
6622 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
|
6623 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
|
6624 return; |
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 /* 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
|
6627 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
|
6628 ->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
|
6629 if (NILP (enabled_p)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6630 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6631 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6632 if (button_event->type == ButtonPress) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6633 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6634 /* Show item in pressed state. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6635 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
|
6636 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
|
6637 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
|
6638 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6639 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6640 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6641 Lisp_Object key, frame; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6642 struct input_event event; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6643 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6644 /* Show item in released state. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6645 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
|
6646 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
|
6647 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6648 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
|
6649 ->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
|
6650 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6651 XSETFRAME (frame, f); |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6652 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
|
6653 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
|
6654 kbd_buffer_store_event (&event); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6655 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6656 event.kind = TOOL_BAR_EVENT; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6657 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
|
6658 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
|
6659 button_event->state); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6660 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
|
6661 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
|
6662 } |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6663 } |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6664 |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6665 |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6666 /* 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
|
6667 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
|
6668 note_mouse_highlight. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6669 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6670 static void |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6671 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
|
6672 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6673 int x, y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6674 { |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6675 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
|
6676 struct window *w = XWINDOW (window); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6677 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
|
6678 int hpos, vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6679 struct glyph *glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6680 struct glyph_row *row; |
25716
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
6681 int i; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6682 Lisp_Object enabled_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6683 int prop_idx; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6684 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
|
6685 int mouse_down_p, rc; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6686 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6687 /* 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
|
6688 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
|
6689 if (x <= 0 || y <= 0) |
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 clear_mouse_face (dpyinfo); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6692 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6693 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6694 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6695 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
|
6696 if (rc < 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6697 { |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6698 /* Not on tool-bar item. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6699 clear_mouse_face (dpyinfo); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6700 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6701 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6702 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
|
6703 /* 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
|
6704 goto set_help_echo; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6705 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6706 clear_mouse_face (dpyinfo); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6707 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6708 /* 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
|
6709 mouse_down_p = (dpyinfo->grabbed |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6710 && f == last_mouse_frame |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6711 && FRAME_LIVE_P (f)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6712 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
|
6713 && 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
|
6714 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6715 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6716 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
|
6717 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
|
6718 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6719 /* 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
|
6720 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
|
6721 ->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
|
6722 if (!NILP (enabled_p)) |
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 /* 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
|
6725 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
|
6726 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
|
6727 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
|
6728 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
|
6729 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6730 /* 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
|
6731 dpyinfo->mouse_face_beg_col = hpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6732 dpyinfo->mouse_face_beg_row = vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6733 dpyinfo->mouse_face_beg_x = x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6734 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
|
6735 dpyinfo->mouse_face_past_end = 0; |
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 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
|
6738 dpyinfo->mouse_face_end_row = vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6739 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
|
6740 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
|
6741 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
|
6742 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
|
6743 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6744 /* Display it as active. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6745 show_mouse_face (dpyinfo, draw); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6746 dpyinfo->mouse_face_image_state = draw; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6747 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6748 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6749 set_help_echo: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6750 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6751 /* 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
|
6752 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
|
6753 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
|
6754 ->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
|
6755 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
|
6756 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
|
6757 ->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
|
6758 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6759 |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6762 /* 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
|
6763 *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
|
6764 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
|
6765 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
|
6766 last line in W. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6767 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6768 static int |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6769 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
|
6770 struct window *w; |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6771 int pos; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6772 int *hpos, *vpos, *x, *y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6773 { |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6774 int i; |
6644
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
6775 int lastcol; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6776 int maybe_next_line_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6777 int line_start_position; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6778 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
|
6779 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
|
6780 struct glyph_row *best_row = row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6781 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
|
6782 int current_x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6783 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6784 while (row->y < yb) |
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 if (row->used[TEXT_AREA]) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6787 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
|
6788 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6789 line_start_position = 0; |
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 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
|
6792 break; |
9762
567e3670acc3
(fast_find_position): Special case if POS is end of buffer.
Richard M. Stallman <rms@gnu.org>
parents:
9741
diff
changeset
|
6793 /* 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
|
6794 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
|
6795 else if (line_start_position == pos |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6796 && pos == BUF_ZV (XBUFFER (w->buffer))) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6797 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6798 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
|
6799 break; |
567e3670acc3
(fast_find_position): Special case if POS is end of buffer.
Richard M. Stallman <rms@gnu.org>
parents:
9741
diff
changeset
|
6800 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6801 else if (line_start_position > 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6802 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6803 best_row = row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6804 best_row_vpos = row_vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6805 } |
28281
bd0839655485
(fast_find_position): Make sure not to consider rows
Gerd Moellmann <gerd@gnu.org>
parents:
28231
diff
changeset
|
6806 |
bd0839655485
(fast_find_position): Make sure not to consider rows
Gerd Moellmann <gerd@gnu.org>
parents:
28231
diff
changeset
|
6807 if (row->y + row->height >= yb) |
bd0839655485
(fast_find_position): Make sure not to consider rows
Gerd Moellmann <gerd@gnu.org>
parents:
28231
diff
changeset
|
6808 break; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6809 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6810 ++row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6811 ++row_vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6812 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6813 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6814 /* 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
|
6815 lastcol = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6816 current_x = best_row->x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6817 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
|
6818 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6819 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
|
6820 int charpos; |
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 charpos = glyph->charpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6823 if (charpos == pos) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6824 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6825 *hpos = i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6826 *vpos = best_row_vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6827 *x = current_x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6828 *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
|
6829 return 1; |
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
6830 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6831 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
|
6832 break; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6833 else if (charpos > 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6834 lastcol = i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6835 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6836 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
|
6837 } |
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
6838 |
9762
567e3670acc3
(fast_find_position): Special case if POS is end of buffer.
Richard M. Stallman <rms@gnu.org>
parents:
9741
diff
changeset
|
6839 /* 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
|
6840 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
|
6841 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
|
6842 if (maybe_next_line_p) |
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 ++best_row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6845 ++best_row_vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6846 lastcol = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6847 current_x = best_row->x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6848 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6849 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6850 *vpos = best_row_vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6851 *hpos = lastcol + 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6852 *x = current_x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6853 *y = best_row->y; |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6854 return 0; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6855 } |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6856 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6857 |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6858 /* 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
|
6859 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
|
6860 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6861 static void |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6862 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
|
6863 struct x_display_info *dpyinfo; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6864 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
|
6865 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
6866 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
|
6867 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
|
6868 int i; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6869 int cursor_off_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6870 struct cursor_pos saved_cursor; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6871 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6872 saved_cursor = output_cursor; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6873 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6874 /* 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
|
6875 to do anything. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6876 if (w->current_matrix == NULL) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6877 goto set_x_cursor; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6878 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6879 /* 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
|
6880 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
|
6881 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
|
6882 goto set_x_cursor; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6883 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6884 set_output_cursor (&w->phys_cursor); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6885 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6886 /* 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
|
6887 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
|
6888 i <= dpyinfo->mouse_face_end_row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6889 i++) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6890 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6891 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
|
6892 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
|
6893 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6894 /* 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
|
6895 if (!row->enabled_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6896 continue; |
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 /* 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
|
6899 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
|
6900 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6901 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
|
6902 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
|
6903 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6904 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6905 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6906 start_hpos = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6907 start_x = 0; |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6910 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
|
6911 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
|
6912 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6913 end_hpos = row->used[TEXT_AREA]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6914 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6915 /* 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
|
6916 cursor off. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6917 if (!w->pseudo_window_p |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6918 && i == output_cursor.vpos |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6919 && output_cursor.hpos >= start_hpos - 1 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6920 && output_cursor.hpos <= end_hpos) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6921 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6922 x_update_window_cursor (w, 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6923 cursor_off_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6924 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6925 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6926 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
|
6927 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
|
6928 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
|
6929 } |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6930 |
6660
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
6931 /* 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
|
6932 if (cursor_off_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6933 x_display_cursor (w, 1, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6934 output_cursor.hpos, output_cursor.vpos, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6935 output_cursor.x, output_cursor.y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6936 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6937 output_cursor = saved_cursor; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6938 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6939 set_x_cursor: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6940 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6941 /* Change the mouse cursor. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6942 if (draw == DRAW_NORMAL_TEXT) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6943 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
|
6944 f->output_data.x->text_cursor); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6945 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
|
6946 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
|
6947 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
|
6948 else |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
6949 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
|
6950 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
|
6951 } |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6952 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6953 /* 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
|
6954 Redraw it un-highlighted first. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6955 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6956 void |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
6957 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
|
6958 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
|
6959 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6960 if (tip_frame) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6961 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6962 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
6963 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
|
6964 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
|
6965 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
6966 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
|
6967 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
|
6968 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
|
6969 } |
16491
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6970 |
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6971 /* 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
|
6972 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
|
6973 |
21514 | 6974 void |
16491
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6975 cancel_mouse_face (f) |
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6976 FRAME_PTR f; |
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6977 { |
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6978 Lisp_Object window; |
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6979 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
|
6980 |
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6981 window = dpyinfo->mouse_face_window; |
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6982 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
|
6983 { |
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6984 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
|
6985 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
|
6986 dpyinfo->mouse_face_window = Qnil; |
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6987 } |
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6988 } |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6989 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
6990 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
|
6991 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
|
6992 |
429 | 6993 /* 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
|
6994 *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
|
6995 |
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
6996 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
|
6997 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
|
6998 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
|
6999 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
|
7000 |
11436
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
7001 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
|
7002 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
|
7003 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
|
7004 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7005 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
|
7006 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
|
7007 |
3669
fd4187a96445
(XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents:
3639
diff
changeset
|
7008 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
|
7009 |
429 | 7010 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
|
7011 movement. */ |
429 | 7012 |
7013 static void | |
11122
ce63fb361ae9
(XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents:
11015
diff
changeset
|
7014 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
|
7015 FRAME_PTR *fp; |
11122
ce63fb361ae9
(XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents:
11015
diff
changeset
|
7016 int insist; |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7017 Lisp_Object *bar_window; |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7018 enum scroll_bar_part *part; |
429 | 7019 Lisp_Object *x, *y; |
732 | 7020 unsigned long *time; |
429 | 7021 { |
3669
fd4187a96445
(XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents:
3639
diff
changeset
|
7022 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
|
7023 |
429 | 7024 BLOCK_INPUT; |
7025 | |
20180
bfbf6a2939a3
(XTmouse_position): Handle INSIST < 0.
Karl Heuer <kwzh@gnu.org>
parents:
19447
diff
changeset
|
7026 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
|
7027 x_scroll_bar_report_motion (fp, bar_window, part, x, y, time); |
429 | 7028 else |
7029 { | |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7030 Window root; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7031 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
|
7032 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7033 Window dummy_window; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7034 int dummy; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7035 |
12530
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
7036 Lisp_Object frame, tail; |
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
7037 |
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
7038 /* 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
|
7039 FOR_EACH_FRAME (tail, frame) |
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
7040 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
|
7041 XFRAME (frame)->mouse_moved = 0; |
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
7042 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7043 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
|
7044 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7045 /* 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
|
7046 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
|
7047 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
|
7048 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7049 /* 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
|
7050 &root, |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7051 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7052 /* 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
|
7053 a different screen. */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7054 &dummy_window, |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7055 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7056 /* The position on that root window. */ |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
7057 &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
|
7058 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7059 /* 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
|
7060 &dummy, &dummy, |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7061 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7062 /* 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
|
7063 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
|
7064 (unsigned int *) &dummy); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7065 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7066 /* 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
|
7067 containing the pointer. */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7068 { |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7069 Window win, child; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7070 int win_x, win_y; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7071 int parent_x = 0, parent_y = 0; |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
7072 int count; |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7073 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7074 win = root; |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7075 |
11436
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
7076 /* 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
|
7077 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
|
7078 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
|
7079 |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
7080 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
|
7081 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
7082 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
|
7083 && 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
|
7084 { |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7085 /* 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
|
7086 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
|
7087 XTranslateCoordinates (FRAME_X_DISPLAY (*fp), |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7088 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7089 /* From-window, to-window. */ |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7090 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
|
7091 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7092 /* 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
|
7093 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
|
7094 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7095 /* Child of win. */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7096 &child); |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7097 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
|
7098 } |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7099 else |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7100 { |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7101 while (1) |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7102 { |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
7103 XTranslateCoordinates (FRAME_X_DISPLAY (*fp), |
5228
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 /* From-window, to-window. */ |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7106 root, win, |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7107 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7108 /* From-position, to-position. */ |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7109 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
|
7110 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7111 /* Child of win. */ |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7112 &child); |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7113 |
13627
8873aa3451dd
(XTmouse_position): Exit the loop if child == win.
Richard M. Stallman <rms@gnu.org>
parents:
13598
diff
changeset
|
7114 if (child == None || child == win) |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7115 break; |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7116 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7117 win = child; |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7118 parent_x = win_x; |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7119 parent_y = win_y; |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7120 } |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7121 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7122 /* Now we know that: |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7123 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
|
7124 (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
|
7125 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
|
7126 (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
|
7127 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
|
7128 (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
|
7129 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
|
7130 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
|
7131 never use them in that case.) */ |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7132 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7133 /* 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
|
7134 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
|
7135 } |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
7136 |
11436
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
7137 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
|
7138 f1 = 0; |
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
7139 |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
7140 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
|
7141 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7142 /* 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
|
7143 if (! f1) |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7144 { |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7145 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
|
7146 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7147 if (bar) |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7148 { |
3669
fd4187a96445
(XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents:
3639
diff
changeset
|
7149 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
|
7150 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
|
7151 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
|
7152 } |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7153 } |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7154 |
20180
bfbf6a2939a3
(XTmouse_position): Handle INSIST < 0.
Karl Heuer <kwzh@gnu.org>
parents:
19447
diff
changeset
|
7155 if (f1 == 0 && insist > 0) |
25682
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
7156 f1 = SELECTED_FRAME (); |
11122
ce63fb361ae9
(XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents:
11015
diff
changeset
|
7157 |
3669
fd4187a96445
(XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents:
3639
diff
changeset
|
7158 if (f1) |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7159 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7160 /* 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
|
7161 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
|
7162 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
|
7163 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
|
7164 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
|
7165 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
|
7166 the frame are divided into. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7167 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7168 #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
|
7169 int ignore1, ignore2; |
a9f61727a90c
(construct_mouse_click): Don't convert to glyph units.
Richard M. Stallman <rms@gnu.org>
parents:
6023
diff
changeset
|
7170 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
|
7171 &last_mouse_glyph, |
11122
ce63fb361ae9
(XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents:
11015
diff
changeset
|
7172 FRAME_X_DISPLAY_INFO (f1)->grabbed |
ce63fb361ae9
(XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents:
11015
diff
changeset
|
7173 || insist); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7174 #else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7175 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7176 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
|
7177 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
|
7178 int x = win_x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7179 int y = win_y; |
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 /* 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
|
7182 round down even for negative values. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7183 if (x < 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7184 x -= width - 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7185 if (y < 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7186 y -= height - 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7187 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7188 last_mouse_glyph.width = width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7189 last_mouse_glyph.height = height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7190 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
|
7191 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
|
7192 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7193 #endif |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7194 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7195 *bar_window = Qnil; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7196 *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
|
7197 *fp = f1; |
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
7198 XSETINT (*x, win_x); |
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
7199 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
|
7200 *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
|
7201 } |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7202 } |
429 | 7203 } |
7204 | |
7205 UNBLOCK_INPUT; | |
7206 } | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7207 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7208 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7209 #ifdef USE_X_TOOLKIT |
27428
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7210 |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7211 /* Atimer callback function for TIMER. Called every 0.1s to process |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7212 Xt timeouts, if needed. We must avoid calling XtAppPending as |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7213 much as possible because that function does an implicit XFlush |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7214 that slows us down. */ |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7215 |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7216 static void |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7217 x_process_timeouts (timer) |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7218 struct atimer *timer; |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7219 { |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7220 if (toolkit_scroll_bar_interaction || popup_activated_flag) |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7221 { |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7222 BLOCK_INPUT; |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7223 while (XtAppPending (Xt_app_con) & XtIMTimer) |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7224 XtAppProcessEvent (Xt_app_con, XtIMTimer); |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7225 UNBLOCK_INPUT; |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7226 } |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7227 } |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7228 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7229 #endif /* USE_X_TOOLKIT */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7230 |
429 | 7231 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7232 /* Scroll bar support. */ |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7233 |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7234 /* 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
|
7235 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
|
7236 bits. */ |
27428
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7237 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7238 static struct scroll_bar * |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7239 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
|
7240 Window window_id; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7241 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7242 Lisp_Object tail; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7243 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7244 for (tail = Vframe_list; |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7245 XGCTYPE (tail) == Lisp_Cons; |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
7246 tail = XCDR (tail)) |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7247 { |
6521
a975c5944916
(x_window_to_scroll_bar, x_new_font): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents:
6413
diff
changeset
|
7248 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
|
7249 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
7250 frame = XCAR (tail); |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7251 /* 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
|
7252 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
|
7253 abort (); |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7254 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7255 /* 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
|
7256 right window ID. */ |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7257 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
|
7258 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
|
7259 /* 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
|
7260 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
|
7261 ! GC_NILP (bar) || (bar = condemned, |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7262 condemned = Qnil, |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7263 ! 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
|
7264 bar = XSCROLL_BAR (bar)->next) |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7265 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
|
7266 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
|
7267 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7268 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7269 return 0; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7270 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7271 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7272 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7273 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7274 /************************************************************************ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7275 Toolkit scroll bars |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7276 ************************************************************************/ |
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 #if USE_TOOLKIT_SCROLL_BARS |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7279 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7280 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
|
7281 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
|
7282 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
|
7283 struct scroll_bar *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7284 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
|
7285 int, int, int)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7286 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7287 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7288 /* 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
|
7289 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7290 static XtActionHookId action_hook_id; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7291 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7292 /* 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
|
7293 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
|
7294 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7295 static Lisp_Object window_being_scrolled; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7296 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7297 /* 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
|
7298 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7299 static int last_scroll_bar_part; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7300 |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7301 /* 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
|
7302 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
|
7303 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7304 static Boolean xaw3d_arrow_scroll; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7305 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7306 /* 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
|
7307 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
|
7308 to avoid jerkyness. */ |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7309 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7310 static Boolean xaw3d_pick_top; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7311 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7312 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7313 /* 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
|
7314 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
|
7315 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
|
7316 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
|
7317 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7318 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7319 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
|
7320 num_params) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7321 Widget widget; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7322 XtPointer client_data; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7323 String action_name; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7324 XEvent *event; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7325 String *params; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7326 Cardinal *num_params; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7327 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7328 int scroll_bar_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7329 char *end_action; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7330 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7331 #ifdef USE_MOTIF |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7332 scroll_bar_p = XmIsScrollBar (widget); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7333 end_action = "Release"; |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7334 #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
|
7335 scroll_bar_p = XtIsSubclass (widget, scrollbarWidgetClass); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7336 end_action = "EndScroll"; |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7337 #endif /* USE_MOTIF */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7338 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7339 if (scroll_bar_p |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7340 && strcmp (action_name, end_action) == 0 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7341 && WINDOWP (window_being_scrolled)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7342 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7343 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7344 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7345 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
|
7346 scroll_bar_end_scroll, 0, 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7347 w = XWINDOW (window_being_scrolled); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7348 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
|
7349 window_being_scrolled = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7350 last_scroll_bar_part = -1; |
27428
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7351 |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7352 /* Xt timeouts no longer needed. */ |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7353 toolkit_scroll_bar_interaction = 0; |
24991
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7358 /* 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
|
7359 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
|
7360 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
|
7361 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
|
7362 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7363 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7364 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
|
7365 Lisp_Object window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7366 int part, portion, whole; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7367 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7368 XEvent event; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7369 XClientMessageEvent *ev = (XClientMessageEvent *) &event; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7370 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
|
7371 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7372 /* 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
|
7373 ev->type = ClientMessage; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7374 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
|
7375 ev->display = FRAME_X_DISPLAY (f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7376 ev->window = FRAME_X_WINDOW (f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7377 ev->format = 32; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7378 ev->data.l[0] = (long) window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7379 ev->data.l[1] = (long) part; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7380 ev->data.l[2] = (long) 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7381 ev->data.l[3] = (long) portion; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7382 ev->data.l[4] = (long) whole; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7383 |
27428
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7384 /* Make Xt timeouts work while the scroll bar is active. */ |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7385 toolkit_scroll_bar_interaction = 1; |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7386 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7387 /* 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
|
7388 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
|
7389 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
|
7390 BLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7391 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
|
7392 UNBLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7393 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7394 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7395 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7396 /* 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
|
7397 in *IEVENT. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7398 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7399 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7400 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
|
7401 XEvent *event; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7402 struct input_event *ievent; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7403 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7404 XClientMessageEvent *ev = (XClientMessageEvent *) event; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7405 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
|
7406 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
|
7407 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7408 ievent->kind = scroll_bar_click; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7409 ievent->frame_or_window = window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7410 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
|
7411 ievent->part = ev->data.l[1]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7412 ievent->code = ev->data.l[2]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7413 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
|
7414 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
|
7415 ievent->modifiers = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7416 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7417 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7418 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7419 #ifdef USE_MOTIF |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7420 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7421 /* 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
|
7422 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7423 #define XM_SB_MIN 1 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7424 #define XM_SB_MAX 10000000 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7425 #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
|
7426 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7427 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7428 /* 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
|
7429 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
|
7430 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
|
7431 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7432 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7433 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
|
7434 Widget widget; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7435 XtPointer client_data, call_data; |
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 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
|
7438 XmScrollBarCallbackStruct *cs = (XmScrollBarCallbackStruct *) call_data; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7439 double percent; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7440 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
|
7441 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7442 switch (cs->reason) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7443 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7444 case XmCR_DECREMENT: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7445 bar->dragging = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7446 part = scroll_bar_up_arrow; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7447 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7448 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7449 case XmCR_INCREMENT: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7450 bar->dragging = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7451 part = scroll_bar_down_arrow; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7452 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7453 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7454 case XmCR_PAGE_DECREMENT: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7455 bar->dragging = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7456 part = scroll_bar_above_handle; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7457 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7458 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7459 case XmCR_PAGE_INCREMENT: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7460 bar->dragging = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7461 part = scroll_bar_below_handle; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7462 break; |
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 case XmCR_TO_TOP: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7465 bar->dragging = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7466 part = scroll_bar_to_top; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7467 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7468 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7469 case XmCR_TO_BOTTOM: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7470 bar->dragging = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7471 part = scroll_bar_to_bottom; |
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_DRAG: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7475 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7476 int slider_size; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7477 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
|
7478 && XINT (bar->dragging) <= cs->value); |
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 /* Get the slider size. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7481 BLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7482 XtVaGetValues (widget, XmNsliderSize, &slider_size, NULL); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7483 UNBLOCK_INPUT; |
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 /* 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
|
7486 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
|
7487 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
|
7488 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
|
7489 we have to do something. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7490 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7491 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
|
7492 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
|
7493 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
|
7494 a better slider behavior. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7495 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7496 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
|
7497 || (dragging_down_p |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7498 && 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
|
7499 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7500 part = scroll_bar_down_arrow; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7501 bar->dragging = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7502 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7503 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7504 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7505 whole = XM_SB_RANGE; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7506 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
|
7507 part = scroll_bar_handle; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7508 bar->dragging = make_number (cs->value); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7509 } |
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 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7512 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7513 case XmCR_VALUE_CHANGED: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7514 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7515 }; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7516 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7517 if (part >= 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7518 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7519 window_being_scrolled = bar->window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7520 last_scroll_bar_part = part; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7521 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
|
7522 } |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7525 |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7526 #else /* !USE_MOTIF, i.e. Xaw. */ |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7527 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7528 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7529 /* 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
|
7530 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
|
7531 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
|
7532 the thumb is. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7533 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7534 static void |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7535 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
|
7536 Widget widget; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7537 XtPointer client_data, call_data; |
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 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
|
7540 float top = *(float *) call_data; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7541 float shown; |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7542 int whole, portion, height; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7543 int part; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7544 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7545 /* 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
|
7546 BLOCK_INPUT; |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7547 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
|
7548 UNBLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7549 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7550 whole = 10000000; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7551 portion = shown < 1 ? top * whole : 0; |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7552 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7553 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
|
7554 /* 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
|
7555 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
|
7556 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
|
7557 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
|
7558 bottom). */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7559 part = scroll_bar_down_arrow; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7560 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7561 part = scroll_bar_handle; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7562 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7563 window_being_scrolled = bar->window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7564 bar->dragging = make_number (portion); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7565 last_scroll_bar_part = part; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7566 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
|
7567 } |
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 |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7570 /* 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
|
7571 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
|
7572 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
|
7573 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
|
7574 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
|
7575 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
|
7576 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
|
7577 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7578 static void |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7579 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
|
7580 Widget widget; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7581 XtPointer client_data, call_data; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7582 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7583 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
|
7584 int position = (int) call_data; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7585 Dimension height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7586 int part; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7587 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7588 /* 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
|
7589 BLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7590 XtVaGetValues (widget, XtNheight, &height, NULL); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7591 UNBLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7592 |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7593 if (abs (position) >= height) |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7594 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
|
7595 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7596 /* If Xaw3d was compiled with ARROW_SCROLLBAR, |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7597 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
|
7598 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
|
7599 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
|
7600 else |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7601 part = scroll_bar_move_ratio; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7602 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7603 window_being_scrolled = bar->window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7604 bar->dragging = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7605 last_scroll_bar_part = part; |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7606 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
|
7607 } |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7610 #endif /* not USE_MOTIF */ |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7613 /* 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
|
7614 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
|
7615 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7616 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7617 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
|
7618 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7619 struct scroll_bar *bar; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7620 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7621 Window xwindow; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7622 Widget widget; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7623 Arg av[20]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7624 int ac = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7625 char *scroll_bar_name = "verticalScrollBar"; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7626 unsigned long pixel; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7627 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7628 BLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7629 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7630 #ifdef USE_MOTIF |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7631 /* LessTif 0.85, problems: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7632 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7633 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
|
7634 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
|
7635 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7636 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
|
7637 cursor (see below)? */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7638 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7639 /* Set resources. Create the widget. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7640 XtSetArg (av[ac], XtNmappedWhenManaged, False); ++ac; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7641 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
|
7642 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
|
7643 XtSetArg (av[ac], XmNorientation, XmVERTICAL); ++ac; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7644 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
|
7645 XtSetArg (av[ac], XmNincrement, 1); ++ac; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7646 XtSetArg (av[ac], XmNpageIncrement, 1); ++ac; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7647 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7648 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
|
7649 if (pixel != -1) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7650 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7651 XtSetArg (av[ac], XmNforeground, pixel); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7652 ++ac; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7653 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7654 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7655 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
|
7656 if (pixel != -1) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7657 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7658 XtSetArg (av[ac], XmNbackground, pixel); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7659 ++ac; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7660 } |
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 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
|
7663 scroll_bar_name, av, ac); |
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 /* 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
|
7666 XtAddCallback (widget, XmNdecrementCallback, xm_scroll_callback, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7667 (XtPointer) bar); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7668 XtAddCallback (widget, XmNdragCallback, xm_scroll_callback, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7669 (XtPointer) bar); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7670 XtAddCallback (widget, XmNincrementCallback, xm_scroll_callback, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7671 (XtPointer) bar); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7672 XtAddCallback (widget, XmNpageDecrementCallback, xm_scroll_callback, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7673 (XtPointer) bar); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7674 XtAddCallback (widget, XmNpageIncrementCallback, xm_scroll_callback, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7675 (XtPointer) bar); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7676 XtAddCallback (widget, XmNtoBottomCallback, xm_scroll_callback, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7677 (XtPointer) bar); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7678 XtAddCallback (widget, XmNtoTopCallback, xm_scroll_callback, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7679 (XtPointer) bar); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7680 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7681 /* 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
|
7682 XtRealizeWidget (widget); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7683 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7684 /* 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
|
7685 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
|
7686 XDefineCursor (XtDisplay (widget), XtWindow (widget), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7687 f->output_data.x->nontext_cursor); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7688 |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7689 #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
|
7690 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7691 /* 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
|
7692 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
|
7693 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
|
7694 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
|
7695 XtSetArg (av[ac], XtNmappedWhenManaged, False); ++ac; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7696 XtSetArg (av[ac], XtNorientation, XtorientVertical); ++ac; |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7697 /* For smoother scrolling with Xaw3d -sm */ |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7698 /* XtSetArg (av[ac], XtNpickTop, True); ++ac; */ |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7699 /* 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
|
7700 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7701 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
|
7702 if (pixel != -1) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7703 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7704 XtSetArg (av[ac], XtNforeground, pixel); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7705 ++ac; |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7708 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
|
7709 if (pixel != -1) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7710 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7711 XtSetArg (av[ac], XtNbackground, pixel); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7712 ++ac; |
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 widget = XtCreateWidget (scroll_bar_name, scrollbarWidgetClass, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7716 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
|
7717 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7718 { |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7719 char *initial = ""; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7720 char *val = initial; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7721 XtVaGetValues (widget, XtNscrollVCursor, (XtPointer) &val, |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7722 XtNpickTop, (XtPointer) &xaw3d_pick_top, NULL); |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7723 if (val == initial) |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7724 { /* ARROW_SCROLL */ |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7725 xaw3d_arrow_scroll = True; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7726 /* 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
|
7727 XtVaSetValues (widget, XtNcursorName, "top_left_arrow", NULL); |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7728 } |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7729 } |
24991
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 /* Define callbacks. */ |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7732 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
|
7733 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
|
7734 (XtPointer) bar); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7735 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7736 /* 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
|
7737 XtRealizeWidget (widget); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7738 |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7739 #endif /* !USE_MOTIF */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7740 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7741 /* 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
|
7742 finishes interacting with a scroll bar. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7743 if (action_hook_id == 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7744 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
|
7745 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7746 /* 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
|
7747 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
|
7748 xwindow = XtWindow (widget); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7749 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
|
7750 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7751 UNBLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7752 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7753 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7754 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7755 /* 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
|
7756 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
|
7757 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7758 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7759 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
|
7760 struct scroll_bar *bar; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7761 int portion, position, whole; |
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 float top, shown; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7764 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
|
7765 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7766 if (whole == 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7767 top = 0, shown = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7768 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7769 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7770 top = (float) position / whole; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7771 shown = (float) portion / whole; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7772 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7773 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7774 BLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7775 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7776 #ifdef USE_MOTIF |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7777 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7778 int size, value; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7779 Boolean arrow1_selected, arrow2_selected; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7780 unsigned char flags; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7781 XmScrollBarWidget sb; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7782 |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7783 /* 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
|
7784 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
|
7785 value. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7786 size = shown * XM_SB_RANGE; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7787 size = min (size, XM_SB_RANGE); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7788 size = max (size, 1); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7789 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7790 /* 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
|
7791 value = top * XM_SB_RANGE; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7792 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
|
7793 value = max (value, XM_SB_MIN); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7794 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7795 /* 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
|
7796 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
|
7797 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
|
7798 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
|
7799 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
|
7800 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
|
7801 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7802 sb = (XmScrollBarWidget) widget; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7803 arrow1_selected = sb->scrollBar.arrow1_selected; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7804 arrow2_selected = sb->scrollBar.arrow2_selected; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7805 flags = sb->scrollBar.flags; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7806 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7807 if (NILP (bar->dragging)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7808 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
|
7809 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
|
7810 /* 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
|
7811 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
|
7812 page-wise movement. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7813 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
|
7814 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7815 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7816 /* 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
|
7817 This reduces flicker effects. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7818 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
|
7819 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7820 XmScrollBarGetValues (widget, &old_value, &old_size, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7821 &increment, &page_increment); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7822 XmScrollBarSetValues (widget, old_value, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7823 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
|
7824 0, 0, False); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7825 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7826 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7827 sb->scrollBar.arrow1_selected = arrow1_selected; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7828 sb->scrollBar.arrow2_selected = arrow2_selected; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7829 sb->scrollBar.flags = flags; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7830 } |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7831 #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
|
7832 { |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7833 float old_top, old_shown; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7834 Dimension height; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7835 XtVaGetValues (widget, |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7836 XtNtopOfThumb, &old_top, |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7837 XtNshown, &old_shown, |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7838 XtNheight, &height, |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7839 NULL); |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7840 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7841 /* Massage the top+shown values. */ |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7842 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
|
7843 top = max (0, min (1, top)); |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7844 else |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7845 top = old_top; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7846 /* 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
|
7847 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
|
7848 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7849 /* 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
|
7850 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
|
7851 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
|
7852 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
|
7853 { |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7854 if (NILP (bar->dragging)) |
25101
6b42357f28f9
(x_set_toolkit_scroll_bar_thumb): Fix previous change.
Gerd Moellmann <gerd@gnu.org>
parents:
25091
diff
changeset
|
7855 XawScrollbarSetThumb (widget, top, shown); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7856 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7857 { |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7858 #ifdef HAVE_XAW3D |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7859 ScrollbarWidget sb = (ScrollbarWidget) widget; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7860 int scroll_mode; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7861 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7862 /* `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
|
7863 if (xaw3d_arrow_scroll) |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7864 { |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7865 /* Xaw3d stupidly ignores resize requests while dragging |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7866 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
|
7867 scroll_mode = sb->scrollbar.scroll_mode; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7868 if (scroll_mode == 2) |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7869 sb->scrollbar.scroll_mode = 0; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7870 } |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7871 #endif |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7872 /* 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
|
7873 if (!xaw3d_pick_top) |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7874 shown = min (shown, old_shown); |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7875 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7876 XawScrollbarSetThumb (widget, top, shown); |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7877 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7878 #ifdef HAVE_XAW3D |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7879 if (xaw3d_arrow_scroll && scroll_mode == 2) |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7880 sb->scrollbar.scroll_mode = scroll_mode; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7881 #endif |
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 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7884 } |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7885 #endif /* !USE_MOTIF */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7886 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7887 UNBLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7888 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7889 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7890 #endif /* USE_TOOLKIT_SCROLL_BARS */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7891 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7892 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7893 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7894 /************************************************************************ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7895 Scroll bars, general |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7896 ************************************************************************/ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7897 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7898 /* 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
|
7899 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
|
7900 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
|
7901 scroll bar. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7902 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7903 static struct scroll_bar * |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7904 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
|
7905 struct window *w; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7906 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
|
7907 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7908 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
|
7909 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
|
7910 = 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
|
7911 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7912 BLOCK_INPUT; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7913 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7914 #if USE_TOOLKIT_SCROLL_BARS |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7915 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
|
7916 #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
|
7917 { |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7918 XSetWindowAttributes a; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7919 unsigned long mask; |
25716
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
7920 Window window; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7921 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7922 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
|
7923 if (a.background_pixel == -1) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7924 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
|
7925 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7926 a.event_mask = (ButtonPressMask | ButtonReleaseMask |
1793
cf4c3f01ddb9
* xterm.c (x_scrollbar_create): Include PointerMotionHintMask in
Jim Blandy <jimb@redhat.com>
parents:
1787
diff
changeset
|
7927 | ButtonMotionMask | PointerMotionHintMask |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7928 | ExposureMask); |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
7929 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
|
7930 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
7931 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
|
7932 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7933 /* 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
|
7934 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
|
7935 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
|
7936 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
|
7937 left, top, width, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7938 window_box_height (w), False); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7939 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7940 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
|
7941 /* Position and size of scroll bar. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7942 left + VERTICAL_SCROLL_BAR_WIDTH_TRIM, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7943 top, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7944 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
|
7945 height, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7946 /* Border width, depth, class, and visual. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7947 0, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7948 CopyFromParent, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7949 CopyFromParent, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7950 CopyFromParent, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7951 /* Attributes. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7952 mask, &a); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7953 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
|
7954 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7955 #endif /* not USE_TOOLKIT_SCROLL_BARS */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7956 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7957 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
|
7958 XSETINT (bar->top, top); |
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
7959 XSETINT (bar->left, left); |
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
7960 XSETINT (bar->width, width); |
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
7961 XSETINT (bar->height, height); |
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
7962 XSETINT (bar->start, 0); |
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
7963 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
|
7964 bar->dragging = Qnil; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7965 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7966 /* 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
|
7967 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
|
7968 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
|
7969 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
|
7970 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
|
7971 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
|
7972 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7973 /* Map the window/widget. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7974 #if USE_TOOLKIT_SCROLL_BARS |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7975 XtMapWidget (SCROLL_BAR_X_WIDGET (bar)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7976 XtConfigureWidget (SCROLL_BAR_X_WIDGET (bar), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7977 left + VERTICAL_SCROLL_BAR_WIDTH_TRIM, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7978 top, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7979 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
|
7980 height, 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7981 #else /* not USE_TOOLKIT_SCROLL_BARS */ |
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
7982 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
|
7983 #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
|
7984 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7985 UNBLOCK_INPUT; |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7986 return bar; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7987 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7988 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7989 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7990 /* 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
|
7991 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7992 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
|
7993 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
|
7994 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
|
7995 events.) |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7996 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7997 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
|
7998 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
|
7999 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
|
8000 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
|
8001 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
|
8002 |
25716
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
8003 #ifndef USE_TOOLKIT_SCROLL_BARS |
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
8004 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8005 static void |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8006 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
|
8007 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
|
8008 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
|
8009 int rebuild; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8010 { |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8011 int dragging = ! NILP (bar->dragging); |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8012 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
|
8013 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
|
8014 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
|
8015 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8016 /* 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
|
8017 if (! rebuild |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8018 && 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
|
8019 && 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
|
8020 return; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8021 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8022 BLOCK_INPUT; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8023 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8024 { |
16251
ec1b1ae37295
Pass frame arg in calls to VERTICAL_SCROLL_BAR_INSIDE_HEIGHT
Richard M. Stallman <rms@gnu.org>
parents:
16220
diff
changeset
|
8025 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
|
8026 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
|
8027 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
|
8028 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8029 /* 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
|
8030 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
|
8031 { |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8032 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
|
8033 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8034 if (start < 0) |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8035 start = 0; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8036 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
|
8037 start = top_range; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8038 end = start + length; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8039 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8040 if (end < start) |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8041 end = start; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8042 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
|
8043 end = top_range; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8044 } |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8045 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8046 /* 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
|
8047 XSETINT (bar->start, start); |
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
8048 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
|
8049 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8050 /* 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
|
8051 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
|
8052 end = top_range; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8053 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8054 /* 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
|
8055 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
|
8056 that many pixels tall. */ |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8057 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
|
8058 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8059 /* 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
|
8060 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
|
8061 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
|
8062 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
|
8063 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8064 /* 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
|
8065 VERTICAL_SCROLL_BAR_LEFT_BORDER, |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8066 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
|
8067 inside_width, start, |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8068 False); |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8069 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8070 /* 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
|
8071 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
|
8072 XSetForeground (FRAME_X_DISPLAY (f), gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8073 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
|
8074 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8075 /* 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
|
8076 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
|
8077 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8078 /* x, y, width, height */ |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8079 VERTICAL_SCROLL_BAR_LEFT_BORDER, |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8080 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
|
8081 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
|
8082 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8083 /* 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
|
8084 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
|
8085 XSetForeground (FRAME_X_DISPLAY (f), gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8086 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
|
8087 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8088 /* 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
|
8089 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
|
8090 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
|
8091 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
|
8092 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8093 /* 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
|
8094 VERTICAL_SCROLL_BAR_LEFT_BORDER, |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8095 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
|
8096 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
|
8097 False); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8098 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8099 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8100 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8101 UNBLOCK_INPUT; |
25716
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
8102 } |
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
8103 |
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
8104 #endif /* !USE_TOOLKIT_SCROLL_BARS */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8105 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8106 /* 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
|
8107 nil. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8108 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8109 static void |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8110 x_scroll_bar_remove (bar) |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8111 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
|
8112 { |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8113 BLOCK_INPUT; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8114 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8115 #if USE_TOOLKIT_SCROLL_BARS |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8116 XtDestroyWidget (SCROLL_BAR_X_WIDGET (bar)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8117 #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
|
8118 { |
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
8119 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
|
8120 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
|
8121 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8122 #endif /* not USE_TOOLKIT_SCROLL_BARS */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8123 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8124 /* 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
|
8125 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
|
8126 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8127 UNBLOCK_INPUT; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8128 } |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8129 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8130 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8131 /* 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
|
8132 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
|
8133 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
|
8134 create one. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8135 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8136 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8137 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
|
8138 struct window *w; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8139 int portion, whole, position; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8140 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8141 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
|
8142 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
|
8143 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
|
8144 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
|
8145 |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8146 /* Get window dimensions. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8147 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
|
8148 top = window_y; |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8149 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
|
8150 height = window_height; |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8151 |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8152 /* 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
|
8153 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
|
8154 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
|
8155 else |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8156 left = XFASTINT (w->left); |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8157 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
|
8158 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
|
8159 |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8160 /* 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
|
8161 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
|
8162 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
|
8163 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
|
8164 else |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8165 sb_width = width; |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8166 |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8167 /* 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
|
8168 #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
|
8169 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
|
8170 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
|
8171 else |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8172 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
|
8173 #else |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8174 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
|
8175 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
|
8176 else |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8177 sb_left = left; |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8178 #endif |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8179 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8180 /* 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
|
8181 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
|
8182 { |
25529
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
8183 BLOCK_INPUT; |
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8184 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
|
8185 left, top, width, height, False); |
25529
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
8186 UNBLOCK_INPUT; |
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8187 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
|
8188 } |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8189 else |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8190 { |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8191 /* 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
|
8192 unsigned int mask = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8193 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8194 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
|
8195 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8196 BLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8197 |
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8198 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
|
8199 mask |= CWX; |
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8200 if (top != XINT (bar->top)) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8201 mask |= CWY; |
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8202 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
|
8203 mask |= CWWidth; |
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8204 if (height != XINT (bar->height)) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8205 mask |= CWHeight; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8206 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8207 #ifdef USE_TOOLKIT_SCROLL_BARS |
25269
621067279f19
(XTset_vertical_scroll_bar) [USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents:
25191
diff
changeset
|
8208 |
621067279f19
(XTset_vertical_scroll_bar) [USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents:
25191
diff
changeset
|
8209 /* 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
|
8210 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
|
8211 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
|
8212 left, top, width, height, False); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8213 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8214 /* Move/size the scroll bar widget. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8215 if (mask) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8216 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
|
8217 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
|
8218 top, |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8219 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
|
8220 height, 0); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8221 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8222 #else /* not USE_TOOLKIT_SCROLL_BARS */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8223 |
25633
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8224 if (VERTICAL_SCROLL_BAR_WIDTH_TRIM) |
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8225 { |
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8226 /* 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
|
8227 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
|
8228 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
|
8229 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
|
8230 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
|
8231 left, top, VERTICAL_SCROLL_BAR_WIDTH_TRIM, |
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8232 height, False); |
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8233 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
|
8234 left + width - VERTICAL_SCROLL_BAR_WIDTH_TRIM, |
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8235 top, VERTICAL_SCROLL_BAR_WIDTH_TRIM, |
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8236 height, False); |
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8237 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8238 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8239 /* Move/size the scroll bar window. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8240 if (mask) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8241 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8242 XWindowChanges wc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8243 |
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8244 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
|
8245 wc.y = top; |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8246 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
|
8247 wc.height = height; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8248 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
|
8249 mask, &wc); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8250 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8251 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8252 #endif /* not USE_TOOLKIT_SCROLL_BARS */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8253 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8254 /* Remember new settings. */ |
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8255 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
|
8256 XSETINT (bar->top, top); |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8257 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
|
8258 XSETINT (bar->height, height); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8259 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8260 UNBLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8261 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8262 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8263 #if USE_TOOLKIT_SCROLL_BARS |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8264 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
|
8265 #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
|
8266 /* 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
|
8267 dragged. */ |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8268 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
|
8269 { |
25541
be975dcf4a0c
(XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents:
25529
diff
changeset
|
8270 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
|
8271 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8272 if (whole == 0) |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8273 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
|
8274 else |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8275 { |
3686
910ea1d66bfd
* xterm.c (XTset_vertical_scroll_bar): Use double type for
Jim Blandy <jimb@redhat.com>
parents:
3683
diff
changeset
|
8276 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
|
8277 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
|
8278 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
|
8279 } |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8280 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8281 #endif /* not USE_TOOLKIT_SCROLL_BARS */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8282 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8283 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
|
8284 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8285 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8286 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8287 /* 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
|
8288 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
|
8289 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
|
8290 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
|
8291 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
|
8292 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
|
8293 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
|
8294 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8295 /* 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
|
8296 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
|
8297 `*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
|
8298 |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
8299 static void |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8300 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
|
8301 FRAME_PTR frame; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8302 { |
13205
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
8303 /* 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
|
8304 while (! NILP (FRAME_SCROLL_BARS (frame))) |
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
8305 { |
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
8306 Lisp_Object bar; |
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
8307 bar = FRAME_SCROLL_BARS (frame); |
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
8308 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
|
8309 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
|
8310 XSCROLL_BAR (bar)->prev = Qnil; |
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
8311 if (! NILP (FRAME_CONDEMNED_SCROLL_BARS (frame))) |
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
8312 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
|
8313 FRAME_CONDEMNED_SCROLL_BARS (frame) = bar; |
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
8314 } |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8315 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8316 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8317 /* 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
|
8318 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
|
8319 static void |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8320 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
|
8321 struct window *window; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8322 { |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8323 struct scroll_bar *bar; |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8324 |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8325 /* 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
|
8326 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
|
8327 abort (); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8328 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8329 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
|
8330 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8331 /* 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
|
8332 { |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8333 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
|
8334 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8335 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
|
8336 { |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8337 /* 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
|
8338 the lists. */ |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8339 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
|
8340 /* 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
|
8341 return; |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8342 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
|
8343 window->vertical_scroll_bar)) |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8344 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
|
8345 else |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8346 /* 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
|
8347 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
|
8348 abort (); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8349 } |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8350 else |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8351 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
|
8352 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8353 if (! NILP (bar->next)) |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8354 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
|
8355 |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8356 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
|
8357 bar->prev = Qnil; |
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
8358 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
|
8359 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
|
8360 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
|
8361 } |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8362 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8363 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8364 /* 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
|
8365 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
|
8366 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8367 static void |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8368 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
|
8369 FRAME_PTR f; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8370 { |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8371 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
|
8372 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8373 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
|
8374 |
5752a95053f2
* xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents:
1793
diff
changeset
|
8375 /* 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
|
8376 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
|
8377 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
|
8378 |
5752a95053f2
* xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents:
1793
diff
changeset
|
8379 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
|
8380 { |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8381 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
|
8382 |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8383 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
|
8384 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8385 next = b->next; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8386 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
|
8387 } |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8388 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8389 /* 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
|
8390 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
|
8391 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8392 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8393 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8394 /* 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
|
8395 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
|
8396 |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8397 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
|
8398 mark bits. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8399 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8400 static void |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8401 x_scroll_bar_expose (bar, event) |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8402 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
|
8403 XEvent *event; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8404 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8405 #ifndef USE_TOOLKIT_SCROLL_BARS |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8406 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8407 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
|
8408 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
|
8409 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
|
8410 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
|
8411 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8412 BLOCK_INPUT; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8413 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8414 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
|
8415 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8416 /* 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
|
8417 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
|
8418 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8419 /* 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
|
8420 0, 0, |
16301
a02555b4b2b9
(x_scroll_bar_create, x_scroll_bar_move):
Richard M. Stallman <rms@gnu.org>
parents:
16251
diff
changeset
|
8421 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
|
8422 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
|
8423 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8424 UNBLOCK_INPUT; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8425 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8426 #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
|
8427 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8428 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8429 /* 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
|
8430 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
|
8431 |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8432 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
|
8433 mark bits. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8434 |
25716
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
8435 #ifndef USE_TOOLKIT_SCROLL_BARS |
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
8436 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8437 static void |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8438 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
|
8439 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
|
8440 XEvent *event; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8441 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
|
8442 { |
10287
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
8443 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
|
8444 abort (); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8445 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8446 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
|
8447 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
|
8448 emacs_event->modifiers |
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
8449 = (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
|
8450 (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
|
8451 event->xbutton.state) |
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
8452 | (event->type == ButtonRelease |
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
8453 ? up_modifier |
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
8454 : down_modifier)); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8455 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
|
8456 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
|
8457 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8458 #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
|
8459 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
|
8460 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
|
8461 = 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
|
8462 #endif |
10287
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
8463 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
|
8464 = 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
|
8465 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
|
8466 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8467 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
|
8468 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
|
8469 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8470 if (y < XINT (bar->start)) |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8471 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
|
8472 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
|
8473 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
|
8474 else |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8475 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
|
8476 |
5440f00480e6
* xterm.c (x_scroll_bar_handle_click): Never grab the scroll bar;
Jim Blandy <jimb@redhat.com>
parents:
2923
diff
changeset
|
8477 /* 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
|
8478 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
|
8479 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
|
8480 #if 0 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8481 /* 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
|
8482 holding it. */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8483 if (event->type == ButtonPress |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8484 && 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
|
8485 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
|
8486 #endif |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8487 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8488 /* 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
|
8489 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
|
8490 && ! NILP (bar->dragging)) |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8491 { |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8492 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
|
8493 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
|
8494 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8495 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
|
8496 bar->dragging = Qnil; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8497 } |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8498 |
2958
3124e6244d1a
* xterm.c (x_scroll_bar_handle_click): Never grab the scroll bar;
Jim Blandy <jimb@redhat.com>
parents:
2953
diff
changeset
|
8499 /* 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
|
8500 #if 0 |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
8501 /* 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
|
8502 the handle. */ |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8503 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
|
8504 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
|
8505 else |
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
8506 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
|
8507 #else |
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
8508 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
|
8509 #endif |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8510 |
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
8511 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
|
8512 } |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8513 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8514 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8515 /* 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
|
8516 |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8517 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
|
8518 mark bits. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8519 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8520 static void |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8521 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
|
8522 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
|
8523 XEvent *event; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8524 { |
12530
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
8525 FRAME_PTR f = XFRAME (XWINDOW (bar->window)->frame); |
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
8526 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8527 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
|
8528 |
12530
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
8529 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
|
8530 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
|
8531 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8532 /* 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
|
8533 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
|
8534 { |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8535 /* 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
|
8536 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
|
8537 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8538 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
|
8539 { |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8540 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
|
8541 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8542 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
|
8543 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8544 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8545 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8546 |
25716
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
8547 #endif /* !USE_TOOLKIT_SCROLL_BARS */ |
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
8548 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8549 /* 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
|
8550 on the scroll bar. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8551 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8552 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
|
8553 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
|
8554 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
|
8555 Lisp_Object *bar_window; |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8556 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
|
8557 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
|
8558 unsigned long *time; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8559 { |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8560 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
|
8561 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
|
8562 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
|
8563 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
|
8564 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
|
8565 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
|
8566 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
|
8567 |
1803
5752a95053f2
* xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents:
1793
diff
changeset
|
8568 BLOCK_INPUT; |
5752a95053f2
* xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents:
1793
diff
changeset
|
8569 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8570 /* 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
|
8571 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
|
8572 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
|
8573 |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8574 /* 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
|
8575 &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
|
8576 &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
|
8577 |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8578 /* 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
|
8579 &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
|
8580 |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8581 /* 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
|
8582 &dummy_mask)) |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8583 ; |
2982
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8584 else |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8585 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8586 #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
|
8587 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
|
8588 = 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
|
8589 #endif |
2982
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8590 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
|
8591 = 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
|
8592 |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8593 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
|
8594 |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8595 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
|
8596 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
|
8597 |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8598 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
|
8599 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
|
8600 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
|
8601 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
|
8602 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
8603 *fp = f; |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8604 *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
|
8605 |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8606 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
|
8607 *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
|
8608 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
|
8609 *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
|
8610 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
|
8611 *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
|
8612 else |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8613 *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
|
8614 |
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
8615 XSETINT (*x, win_y); |
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
8616 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
|
8617 |
12530
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
8618 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
|
8619 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
|
8620 } |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8621 |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8622 *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
|
8623 |
1803
5752a95053f2
* xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents:
1793
diff
changeset
|
8624 UNBLOCK_INPUT; |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8625 } |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8626 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8627 |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
8628 /* 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
|
8629 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
|
8630 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
|
8631 redraw them. */ |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
8632 |
21514 | 8633 void |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8634 x_scroll_bar_clear (f) |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
8635 FRAME_PTR f; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
8636 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8637 #ifndef USE_TOOLKIT_SCROLL_BARS |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
8638 Lisp_Object bar; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
8639 |
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
|
8640 /* 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
|
8641 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
|
8642 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
|
8643 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
|
8644 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
|
8645 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
|
8646 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
|
8647 0, 0, 0, 0, True); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8648 #endif /* not USE_TOOLKIT_SCROLL_BARS */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8649 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8650 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8651 /* 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
|
8652 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
|
8653 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
|
8654 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8655 int |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8656 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
|
8657 XEvent event; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8658 { |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8659 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
|
8660 struct x_display_info *dpyinfo; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8661 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
|
8662 |
5872
6389c826f847
(x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents:
5825
diff
changeset
|
8663 BLOCK_INPUT; |
6389c826f847
(x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents:
5825
diff
changeset
|
8664 |
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
|
8665 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
|
8666 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
|
8667 if (f) |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8668 { |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8669 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
|
8670 { |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8671 f->async_visible = 1; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8672 f->async_iconified = 0; |
18074
06e42aa4c208
(process_expose_from_menu, XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents:
18057
diff
changeset
|
8673 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
|
8674 SET_FRAME_GARBAGED (f); |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8675 } |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8676 else |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8677 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8678 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
|
8679 event.xexpose.x, event.xexpose.y, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8680 event.xexpose.width, event.xexpose.height); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8681 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
|
8682 } |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8683 } |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8684 else |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8685 { |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8686 struct scroll_bar *bar |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8687 = x_window_to_scroll_bar (event.xexpose.window); |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
8688 |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8689 if (bar) |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8690 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
|
8691 } |
5872
6389c826f847
(x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents:
5825
diff
changeset
|
8692 |
6389c826f847
(x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents:
5825
diff
changeset
|
8693 UNBLOCK_INPUT; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8694 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
|
8695 } |
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8696 |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8697 /* 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
|
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 |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8700 { |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8701 XEvent event; |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8702 struct selection_event_queue *next; |
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 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
|
8706 |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8707 /* 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
|
8708 |
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8709 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
|
8710 |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8711 /* 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
|
8712 |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8713 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
|
8714 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
|
8715 FRAME_PTR f; |
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8716 XEvent *event; |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8717 { |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8718 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
|
8719 = (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
|
8720 |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
8721 if (queue_tmp != NULL) |
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8722 { |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8723 queue_tmp->event = *event; |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8724 queue_tmp->next = queue; |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8725 queue = queue_tmp; |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8726 } |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8727 } |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8728 |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8729 /* 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
|
8730 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
|
8731 |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8732 static void |
10634
de7beeb9f02c
(x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents:
10609
diff
changeset
|
8733 x_unqueue_events (display) |
de7beeb9f02c
(x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents:
10609
diff
changeset
|
8734 Display *display; |
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8735 { |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
8736 while (queue != NULL) |
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8737 { |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8738 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
|
8739 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
|
8740 queue = queue_tmp->next; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8741 xfree ((char *)queue_tmp); |
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8742 } |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8743 } |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8744 |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8745 /* Start queuing SelectionRequest events. */ |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8746 |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8747 void |
10634
de7beeb9f02c
(x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents:
10609
diff
changeset
|
8748 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
|
8749 Display *display; |
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8750 { |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8751 x_queue_selection_requests++; |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8752 } |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8753 |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8754 /* Stop queuing SelectionRequest events. */ |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8755 |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8756 void |
10634
de7beeb9f02c
(x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents:
10609
diff
changeset
|
8757 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
|
8758 Display *display; |
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8759 { |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8760 x_queue_selection_requests--; |
10634
de7beeb9f02c
(x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents:
10609
diff
changeset
|
8761 x_unqueue_events (display); |
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8762 } |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8763 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8764 /* The main X event-reading loop - XTread_socket. */ |
286 | 8765 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8766 /* Time stamp of enter window event. This is only used by XTread_socket, |
286 | 8767 but we have to put it out here, since static variables within functions |
8768 sometimes don't work. */ | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8769 |
286 | 8770 static Time enter_timestamp; |
8771 | |
1436
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
8772 /* 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
|
8773 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
|
8774 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
|
8775 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
|
8776 |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
8777 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
|
8778 given for enter_time stamp, above. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8779 |
1436
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
8780 static XComposeStatus compose_status; |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
8781 |
2064 | 8782 /* Record the last 100 characters stored |
8783 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
|
8784 |
12657
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
8785 static int temp_index; |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
8786 static short temp_buffer[100]; |
2064 | 8787 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8788 /* 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
|
8789 on a particular display. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8790 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8791 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
|
8792 |
12657
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
8793 /* 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
|
8794 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
|
8795 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
|
8796 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
|
8797 |
12657
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
8798 static struct x_display_info *next_noop_dpyinfo; |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
8799 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8800 #define SET_SAVED_MENU_EVENT(size) \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8801 do \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8802 { \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8803 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
|
8804 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
|
8805 = (XEvent *) xmalloc (sizeof (XEvent)); \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8806 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
|
8807 if (numchars >= 1) \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8808 { \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8809 bufp->kind = menu_bar_activate_event; \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8810 XSETFRAME (bufp->frame_or_window, f); \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8811 bufp++; \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8812 count++; \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8813 numchars--; \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8814 } \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8815 } \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8816 while (0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8817 |
15711
099dc465c948
(SET_SAVED_MENU_EVENT): New macro.
Karl Heuer <kwzh@gnu.org>
parents:
15639
diff
changeset
|
8818 #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
|
8819 #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
|
8820 |
286 | 8821 /* Read events coming from the X server. |
8822 This routine is called by the SIGIO handler. | |
8823 We return as soon as there are no more events to be read. | |
8824 | |
8825 Events representing keys are stored in buffer BUFP, | |
8826 which can hold up to NUMCHARS characters. | |
8827 We return the number of characters stored into the buffer, | |
8828 thus pretending to be `read'. | |
8829 | |
8830 EXPECTED is nonzero if the caller knows input is available. */ | |
8831 | |
1530
a7f8a1fe258e
* xterm.c (x_convert_modifiers): Declare this to return an
Jim Blandy <jimb@redhat.com>
parents:
1436
diff
changeset
|
8832 int |
16330
e4d9d77012bc
(XTread_socket): Delete WAITP arg.
Richard M. Stallman <rms@gnu.org>
parents:
16301
diff
changeset
|
8833 XTread_socket (sd, bufp, numchars, expected) |
286 | 8834 register int sd; |
15711
099dc465c948
(SET_SAVED_MENU_EVENT): New macro.
Karl Heuer <kwzh@gnu.org>
parents:
15639
diff
changeset
|
8835 /* register */ struct input_event *bufp; |
099dc465c948
(SET_SAVED_MENU_EVENT): New macro.
Karl Heuer <kwzh@gnu.org>
parents:
15639
diff
changeset
|
8836 /* register */ int numchars; |
286 | 8837 int expected; |
8838 { | |
8839 int count = 0; | |
8840 int nbytes = 0; | |
8841 XEvent event; | |
771 | 8842 struct frame *f; |
3938
83d870a52936
* xterm.c (XTread_socket): Initialize event_found to zero, and
Jim Blandy <jimb@redhat.com>
parents:
3924
diff
changeset
|
8843 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
|
8844 struct x_display_info *dpyinfo; |
286 | 8845 |
2439
b6c62e4abf59
Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents:
2353
diff
changeset
|
8846 if (interrupt_input_blocked) |
286 | 8847 { |
2439
b6c62e4abf59
Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents:
2353
diff
changeset
|
8848 interrupt_input_pending = 1; |
286 | 8849 return -1; |
8850 } | |
8851 | |
2439
b6c62e4abf59
Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents:
2353
diff
changeset
|
8852 interrupt_input_pending = 0; |
286 | 8853 BLOCK_INPUT; |
9337
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
8854 |
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
8855 /* 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
|
8856 input_signal_count++; |
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
8857 |
286 | 8858 if (numchars <= 0) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8859 abort (); /* Don't think this happens. */ |
286 | 8860 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8861 /* 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
|
8862 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
|
8863 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
|
8864 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8865 #if 0 /* This ought to be unnecessary; let's verify it. */ |
286 | 8866 #ifdef FIOSNBIO |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8867 /* 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
|
8868 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
|
8869 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
|
8870 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
|
8871 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
|
8872 #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
|
8873 #endif |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8874 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8875 #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
|
8876 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
|
8877 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
|
8878 for X connections. */ |
286 | 8879 #ifndef SIGIO |
8880 #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
|
8881 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
|
8882 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8883 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
|
8884 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
|
8885 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
|
8886 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
|
8887 } |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
8888 #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
|
8889 #endif /* SIGIO */ |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8890 #endif |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8891 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8892 /* 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
|
8893 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
|
8894 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8895 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
|
8896 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
|
8897 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8898 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8899 while (XPending (dpyinfo->display)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8900 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8901 XNextEvent (dpyinfo->display, &event); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8902 |
15973
6ad9e8fee494
(XTread_socket): Call XFilterEvent on all events,
Richard M. Stallman <rms@gnu.org>
parents:
15928
diff
changeset
|
8903 #ifdef HAVE_X_I18N |
15990
1185f8fc0bfb
(do_line_dance, dumprectangle): Use x_update_cursor.
Richard M. Stallman <rms@gnu.org>
parents:
15973
diff
changeset
|
8904 { |
26968
3039d2412c9e
(XTread_socket): At the beginning of the loop, pass the
Gerd Moellmann <gerd@gnu.org>
parents:
26912
diff
changeset
|
8905 /* 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
|
8906 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
|
8907 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
|
8908 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
|
8909 was created. */ |
27500
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
8910 struct frame *f1 = x_any_window_to_frame (dpyinfo, |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
8911 event.xclient.window); |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
8912 if (XFilterEvent (&event, f1 ? FRAME_X_WINDOW (f1) : None)) |
15990
1185f8fc0bfb
(do_line_dance, dumprectangle): Use x_update_cursor.
Richard M. Stallman <rms@gnu.org>
parents:
15973
diff
changeset
|
8913 break; |
1185f8fc0bfb
(do_line_dance, dumprectangle): Use x_update_cursor.
Richard M. Stallman <rms@gnu.org>
parents:
15973
diff
changeset
|
8914 } |
15973
6ad9e8fee494
(XTread_socket): Call XFilterEvent on all events,
Richard M. Stallman <rms@gnu.org>
parents:
15928
diff
changeset
|
8915 #endif |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8916 event_found = 1; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8917 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8918 switch (event.type) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8919 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8920 case ClientMessage: |
642 | 8921 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8922 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
|
8923 == 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
|
8924 && event.xclient.format == 32) |
642 | 8925 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8926 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
|
8927 == 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
|
8928 { |
18885
f7b6579204b8
(XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents:
18775
diff
changeset
|
8929 /* Use x_any_window_to_frame because this |
f7b6579204b8
(XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents:
18775
diff
changeset
|
8930 could be the shell widget window |
f7b6579204b8
(XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents:
18775
diff
changeset
|
8931 if the frame has no title bar. */ |
f7b6579204b8
(XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents:
18775
diff
changeset
|
8932 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
|
8933 #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
|
8934 /* Not quite sure this is needed -pd */ |
18885
f7b6579204b8
(XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents:
18775
diff
changeset
|
8935 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
|
8936 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
|
8937 #endif |
25921
eb5839cbfb16
(XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents:
25795
diff
changeset
|
8938 #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
|
8939 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
|
8940 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
|
8941 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
|
8942 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
|
8943 needed. |
eb5839cbfb16
(XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents:
25795
diff
changeset
|
8944 |
eb5839cbfb16
(XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents:
25795
diff
changeset
|
8945 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
|
8946 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
|
8947 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
|
8948 below can generate additional FocusIn events which confuse |
eb5839cbfb16
(XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents:
25795
diff
changeset
|
8949 Emacs. */ |
eb5839cbfb16
(XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents:
25795
diff
changeset
|
8950 |
18996
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
8951 /* 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
|
8952 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
|
8953 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
|
8954 if (f) |
18996
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
8955 { |
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
8956 Display *d = event.xclient.display; |
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
8957 /* 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
|
8958 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
|
8959 int count = x_catch_errors (d); |
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
8960 XSetInputFocus (d, event.xclient.window, |
25633
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8961 /* The ICCCM says this is |
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8962 the only valid choice. */ |
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8963 RevertToParent, |
18996
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
8964 event.xclient.data.l[1]); |
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
8965 /* 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
|
8966 if there is an error. */ |
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
8967 XSync (d, False); |
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
8968 x_uncatch_errors (d, count); |
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
8969 } |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8970 /* Not certain about handling scroll bars here */ |
25921
eb5839cbfb16
(XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents:
25795
diff
changeset
|
8971 #endif /* 0 */ |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8972 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8973 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
|
8974 == dpyinfo->Xatom_wm_save_yourself) |
642 | 8975 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8976 /* 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
|
8977 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
|
8978 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
|
8979 PropertyNotify. Can restart processing when |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8980 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
|
8981 if (numchars > 0) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8982 { |
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
|
8983 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
|
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 /* 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
|
8987 for a single Emacs process. */ |
25682
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
8988 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
|
8989 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
|
8990 event.xclient.window, |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8991 initial_argv, initial_argc); |
15519
045a36502ad4
(XTread_socket, Xatom_wm_save_yourself clause):
Richard M. Stallman <rms@gnu.org>
parents:
15515
diff
changeset
|
8992 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
|
8993 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
|
8994 event.xclient.window, |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8995 0, 0); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8996 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8997 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8998 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
|
8999 == 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
|
9000 { |
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
|
9001 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
|
9002 = 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
|
9003 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
|
9004 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9005 if (f) |
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 if (numchars == 0) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9008 abort (); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9009 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9010 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
|
9011 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
|
9012 bufp++; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9013 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9014 count += 1; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9015 numchars -= 1; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9016 } |
642 | 9017 } |
9018 } | |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9019 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
|
9020 == dpyinfo->Xatom_wm_configure_denied) |
642 | 9021 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9022 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9023 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
|
9024 == 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
|
9025 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9026 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
|
9027 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
|
9028 = 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
|
9029 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9030 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
|
9031 new_y = event.xclient.data.s[1]; |
771 | 9032 |
9033 if (f) | |
5156
fd78458b8c43
(XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents:
5018
diff
changeset
|
9034 { |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
9035 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
|
9036 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
|
9037 } |
642 | 9038 } |
13507
9a9f459075af
(HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents:
13363
diff
changeset
|
9039 #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
|
9040 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
|
9041 == dpyinfo->Xatom_editres) |
5156
fd78458b8c43
(XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents:
5018
diff
changeset
|
9042 { |
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
|
9043 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
|
9044 = 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
|
9045 _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
|
9046 &event, NULL); |
5156
fd78458b8c43
(XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents:
5018
diff
changeset
|
9047 } |
13507
9a9f459075af
(HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents:
13363
diff
changeset
|
9048 #endif /* HACK_EDITRES */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9049 else if ((event.xclient.message_type |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9050 == dpyinfo->Xatom_DONE) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9051 || (event.xclient.message_type |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9052 == dpyinfo->Xatom_PAGE)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9053 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9054 /* 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
|
9055 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
|
9056 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
|
9057 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
|
9058 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
|
9059 struct frame *f |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9060 = 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
|
9061 x_kill_gs_process (pixmap, f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9062 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
|
9063 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9064 #ifdef USE_TOOLKIT_SCROLL_BARS |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9065 /* 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
|
9066 we construct an input_event. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9067 else if (event.xclient.message_type |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9068 == dpyinfo->Xatom_Scrollbar) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9069 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9070 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
|
9071 ++bufp, ++count, --numchars; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9072 goto out; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9073 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9074 #endif /* USE_TOOLKIT_SCROLL_BARS */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9075 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9076 goto OTHER; |
642 | 9077 } |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9078 break; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9079 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9080 case SelectionNotify: |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9081 #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
|
9082 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
|
9083 goto OTHER; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9084 #endif /* not USE_X_TOOLKIT */ |
21514 | 9085 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
|
9086 break; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9087 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9088 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
|
9089 #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
|
9090 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
|
9091 goto OTHER; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9092 #endif /* USE_X_TOOLKIT */ |
6941
a914781ef58a
(Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents:
6934
diff
changeset
|
9093 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9094 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
|
9095 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9096 if (numchars == 0) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9097 abort (); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9098 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9099 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
|
9100 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
|
9101 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
|
9102 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
|
9103 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
|
9104 bufp++; |
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 count += 1; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9107 numchars -= 1; |
6941
a914781ef58a
(Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents:
6934
diff
changeset
|
9108 } |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9109 break; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9110 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9111 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
|
9112 #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
|
9113 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
|
9114 goto OTHER; |
6984
8e9465c13702
(XTread_socket): Delete the non-NEW_SELECTIONS code
Richard M. Stallman <rms@gnu.org>
parents:
6983
diff
changeset
|
9115 #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
|
9116 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
|
9117 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
|
9118 &event); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9119 else |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9120 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9121 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
|
9122 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9123 if (numchars == 0) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9124 abort (); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9125 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9126 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
|
9127 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
|
9128 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
|
9129 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
|
9130 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
|
9131 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
|
9132 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
|
9133 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
|
9134 bufp++; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9135 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9136 count += 1; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9137 numchars -= 1; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9138 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9139 break; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9140 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9141 case PropertyNotify: |
6984
8e9465c13702
(XTread_socket): Delete the non-NEW_SELECTIONS code
Richard M. Stallman <rms@gnu.org>
parents:
6983
diff
changeset
|
9142 #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
|
9143 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
|
9144 goto OTHER; |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
9145 #endif /* not USE_X_TOOLKIT */ |
21514 | 9146 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
|
9147 break; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9148 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9149 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
|
9150 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
|
9151 if (f) |
286 | 9152 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9153 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
|
9154 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
|
9155 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
|
9156 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
|
9157 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
|
9158 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9159 break; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9160 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9161 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
|
9162 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
|
9163 if (f) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9164 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9165 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
|
9166 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9167 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
|
9168 f->async_iconified = 0; |
18074
06e42aa4c208
(process_expose_from_menu, XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents:
18057
diff
changeset
|
9169 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
|
9170 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
|
9171 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9172 else |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9173 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
|
9174 event.xexpose.window), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9175 event.xexpose.x, event.xexpose.y, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9176 event.xexpose.width, event.xexpose.height); |
286 | 9177 } |
9178 else | |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9179 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9180 #ifdef USE_TOOLKIT_SCROLL_BARS |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9181 /* Dispatch event to the widget. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9182 goto OTHER; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9183 #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
|
9184 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
|
9185 = 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
|
9186 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9187 if (bar) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9188 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
|
9189 #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
|
9190 else |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9191 goto OTHER; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9192 #endif /* USE_X_TOOLKIT */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9193 #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
|
9194 } |
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 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
|
9198 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
|
9199 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
|
9200 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
|
9201 if (f) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9202 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9203 expose_frame (f, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9204 event.xgraphicsexpose.x, event.xgraphicsexpose.y, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9205 event.xgraphicsexpose.width, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9206 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
|
9207 } |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
9208 #ifdef USE_X_TOOLKIT |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
9209 else |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
9210 goto OTHER; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
9211 #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
|
9212 break; |
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 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
|
9215 source area was completely |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9216 available */ |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9217 break; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9218 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9219 case UnmapNotify: |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9220 /* 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
|
9221 if (event.xmap.window == tip_window) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9222 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9223 tip_window = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9224 redo_mouse_highlight (); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9225 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9226 |
12750
7e5276da6270
(XTread_socket): For UnmapNotify, use x_top_window_to_frame.
Richard M. Stallman <rms@gnu.org>
parents:
12667
diff
changeset
|
9227 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
|
9228 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
|
9229 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
|
9230 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9231 /* 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
|
9232 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
|
9233 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
|
9234 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
|
9235 /* 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
|
9236 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
|
9237 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
|
9238 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
|
9239 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
|
9240 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
|
9241 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
|
9242 { |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
9243 f->async_iconified = 1; |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
9244 |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
9245 bufp->kind = iconify_event; |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
9246 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
|
9247 bufp++; |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
9248 count++; |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
9249 numchars--; |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
9250 } |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9251 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9252 goto OTHER; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9253 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9254 case MapNotify: |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9255 if (event.xmap.window == tip_window) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9256 /* 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
|
9257 the SET_FRAME_GARBAGED below. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9258 goto OTHER; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9259 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9260 /* 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
|
9261 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
|
9262 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
|
9263 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
|
9264 if (f) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9265 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9266 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
|
9267 f->async_iconified = 0; |
18074
06e42aa4c208
(process_expose_from_menu, XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents:
18057
diff
changeset
|
9268 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
|
9269 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9270 /* 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
|
9271 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
|
9272 SET_FRAME_GARBAGED (f); |
9823
e6dbda62fd61
(XTread_socket): Generate iconify and deiconify events.
Karl Heuer <kwzh@gnu.org>
parents:
9763
diff
changeset
|
9273 |
11348
e366abc2c753
(XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents:
11259
diff
changeset
|
9274 if (f->iconified) |
e366abc2c753
(XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents:
11259
diff
changeset
|
9275 { |
e366abc2c753
(XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents:
11259
diff
changeset
|
9276 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
|
9277 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
|
9278 bufp++; |
e366abc2c753
(XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents:
11259
diff
changeset
|
9279 count++; |
e366abc2c753
(XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents:
11259
diff
changeset
|
9280 numchars--; |
e366abc2c753
(XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents:
11259
diff
changeset
|
9281 } |
17519
5aa7011aa3d5
(x_set_offset): Turn off the code that added the border_width
Richard M. Stallman <rms@gnu.org>
parents:
17371
diff
changeset
|
9282 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
|
9283 && ! NILP (XCDR (Vframe_list))) |
11921
6ecaa3fac4e4
(XTread_socket): For MapNotify, call record_asynch_buffer_change.
Karl Heuer <kwzh@gnu.org>
parents:
11915
diff
changeset
|
9284 /* 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
|
9285 to update the frame titles |
6ecaa3fac4e4
(XTread_socket): For MapNotify, call record_asynch_buffer_change.
Karl Heuer <kwzh@gnu.org>
parents:
11915
diff
changeset
|
9286 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
|
9287 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
|
9288 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9289 goto OTHER; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9290 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9291 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
|
9292 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
|
9293 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9294 #ifdef USE_MOTIF |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9295 /* 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
|
9296 from consuming key events. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9297 if (f == 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9298 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9299 Widget widget = XtWindowToWidget (dpyinfo->display, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9300 event.xkey.window); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9301 if (widget && XmIsScrollBar (widget)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9302 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9303 widget = XtParent (widget); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9304 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
|
9305 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9306 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9307 #endif /* USE_MOTIF */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9308 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9309 if (f != 0) |
286 | 9310 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9311 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
|
9312 /* 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
|
9313 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
|
9314 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
|
9315 int modifiers; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9316 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9317 event.xkey.state |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9318 |= 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
|
9319 extra_keyboard_modifiers); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9320 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
|
9321 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9322 /* 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
|
9323 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9324 /* 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
|
9325 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
|
9326 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
|
9327 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
|
9328 | 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
|
9329 | 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
|
9330 | 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
|
9331 |
16483
1b53fdb98184
(XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents:
16430
diff
changeset
|
9332 /* In case Meta is ComposeCharacter, |
1b53fdb98184
(XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents:
16430
diff
changeset
|
9333 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
|
9334 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
|
9335 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
|
9336 not it is combined with Meta. */ |
1b53fdb98184
(XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents:
16430
diff
changeset
|
9337 if (modifiers & dpyinfo->meta_mod_mask) |
1b53fdb98184
(XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents:
16430
diff
changeset
|
9338 bzero (&compose_status, sizeof (compose_status)); |
1b53fdb98184
(XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents:
16430
diff
changeset
|
9339 |
13232
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9340 #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
|
9341 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
|
9342 { |
27500
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
9343 unsigned char *copy_bufptr = copy_buffer; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
9344 int copy_bufsiz = sizeof (copy_buffer); |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
9345 Status status_return; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
9346 |
13232
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9347 nbytes = XmbLookupString (FRAME_XIC (f), |
27500
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
9348 &event.xkey, copy_bufptr, |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
9349 copy_bufsiz, &keysym, |
13232
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9350 &status_return); |
27500
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
9351 if (status_return == XBufferOverflow) |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
9352 { |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
9353 copy_bufsiz = nbytes + 1; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
9354 copy_bufptr = (char *) alloca (copy_bufsiz); |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
9355 nbytes = XmbLookupString (FRAME_XIC (f), |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
9356 &event.xkey, copy_bufptr, |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
9357 copy_bufsiz, &keysym, |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
9358 &status_return); |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
9359 } |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
9360 |
23567
5a0cdfd791a2
(XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents:
23515
diff
changeset
|
9361 if (status_return == XLookupNone) |
5a0cdfd791a2
(XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents:
23515
diff
changeset
|
9362 break; |
5a0cdfd791a2
(XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents:
23515
diff
changeset
|
9363 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
|
9364 keysym = NoSymbol; |
5a0cdfd791a2
(XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents:
23515
diff
changeset
|
9365 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
|
9366 && status_return != XLookupBoth) |
5a0cdfd791a2
(XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents:
23515
diff
changeset
|
9367 abort (); |
13232
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9368 } |
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9369 else |
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9370 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
|
9371 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
|
9372 #else |
10287
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
9373 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
|
9374 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
|
9375 #endif |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9376 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9377 orig_keysym = keysym; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9378 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9379 if (numchars > 1) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9380 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9381 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
|
9382 || keysym == XK_Delete |
17227
d11d6c9a48e8
(XTread_socket): Handle ISO_Left_Tab.
Richard M. Stallman <rms@gnu.org>
parents:
17194
diff
changeset
|
9383 #ifdef XK_ISO_Left_Tab |
17232
4604d19bd730
(XTread_socket): Accept XK_ISO_* keys.
Richard M. Stallman <rms@gnu.org>
parents:
17227
diff
changeset
|
9384 || (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
|
9385 #endif |
22400
8fbe6f509385
(XTread_socket): Accept Japanese XK keysyms.
Richard M. Stallman <rms@gnu.org>
parents:
22230
diff
changeset
|
9386 || (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
|
9387 || 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
|
9388 || IsMiscFunctionKey (keysym) /* 0xff60 <= x < VARIES */ |
3218
0069a30d083f
(XTread_socket, case KeyPress) [HPUX]:
Richard M. Stallman <rms@gnu.org>
parents:
3135
diff
changeset
|
9389 #ifdef HPUX |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9390 /* 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
|
9391 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
|
9392 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
|
9393 incorrectly. */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9394 || ((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
|
9395 && (unsigned)(keysym) < XK_KP_Space) |
3218
0069a30d083f
(XTread_socket, case KeyPress) [HPUX]:
Richard M. Stallman <rms@gnu.org>
parents:
3135
diff
changeset
|
9396 #endif |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9397 #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
|
9398 || orig_keysym == XK_dead_circumflex |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9399 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9400 #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
|
9401 || orig_keysym == XK_dead_grave |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9402 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9403 #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
|
9404 || orig_keysym == XK_dead_tilde |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9405 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9406 #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
|
9407 || orig_keysym == XK_dead_diaeresis |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9408 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9409 #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
|
9410 || orig_keysym == XK_dead_macron |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9411 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9412 #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
|
9413 || orig_keysym == XK_dead_degree |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9414 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9415 #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
|
9416 || orig_keysym == XK_dead_acute |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9417 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9418 #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
|
9419 || orig_keysym == XK_dead_cedilla |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9420 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9421 #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
|
9422 || orig_keysym == XK_dead_breve |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9423 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9424 #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
|
9425 || orig_keysym == XK_dead_ogonek |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9426 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9427 #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
|
9428 || orig_keysym == XK_dead_caron |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9429 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9430 #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
|
9431 || orig_keysym == XK_dead_doubleacute |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9432 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9433 #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
|
9434 || orig_keysym == XK_dead_abovedot |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9435 #endif |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9436 || 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
|
9437 || 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
|
9438 /* 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
|
9439 || (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
|
9440 && ! (IsModifierKey (orig_keysym) |
4244
bc70363458c3
(XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents:
4147
diff
changeset
|
9441 #ifndef HAVE_X11R5 |
bc70363458c3
(XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents:
4147
diff
changeset
|
9442 #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
|
9443 || ((unsigned)(orig_keysym) == XK_Mode_switch) |
4244
bc70363458c3
(XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents:
4147
diff
changeset
|
9444 #endif |
bc70363458c3
(XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents:
4147
diff
changeset
|
9445 #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
|
9446 || ((unsigned)(orig_keysym) == XK_Num_Lock) |
4244
bc70363458c3
(XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents:
4147
diff
changeset
|
9447 #endif |
bc70363458c3
(XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents:
4147
diff
changeset
|
9448 #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
|
9449 )) |
286 | 9450 { |
2064 | 9451 if (temp_index == sizeof temp_buffer / sizeof (short)) |
9452 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
|
9453 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
|
9454 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
|
9455 bufp->code = keysym; |
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
9456 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
|
9457 bufp->modifiers |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
9458 = 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
|
9459 modifiers); |
708 | 9460 bufp->timestamp = event.xkey.time; |
286 | 9461 bufp++; |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9462 count++; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9463 numchars--; |
286 | 9464 } |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9465 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
|
9466 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9467 register int i; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9468 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9469 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
|
9470 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9471 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
|
9472 temp_index = 0; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9473 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
|
9474 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
|
9475 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
|
9476 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
|
9477 bufp->modifiers |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9478 = 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
|
9479 modifiers); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9480 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
|
9481 bufp++; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9482 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9483 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9484 count += nbytes; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9485 numchars -= nbytes; |
23567
5a0cdfd791a2
(XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents:
23515
diff
changeset
|
9486 |
5a0cdfd791a2
(XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents:
23515
diff
changeset
|
9487 if (keysym == NoSymbol) |
5a0cdfd791a2
(XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents:
23515
diff
changeset
|
9488 break; |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9489 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9490 else |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9491 abort (); |
286 | 9492 } |
2064 | 9493 else |
9494 abort (); | |
286 | 9495 } |
27619
1d5c785bca99
* xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents:
27542
diff
changeset
|
9496 #ifdef HAVE_X_I18N |
1d5c785bca99
* xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents:
27542
diff
changeset
|
9497 /* Don't dispatch this event since XtDispatchEvent calls |
1d5c785bca99
* xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents:
27542
diff
changeset
|
9498 XFilterEvent, and two calls in a row may freeze the |
1d5c785bca99
* xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents:
27542
diff
changeset
|
9499 client. */ |
1d5c785bca99
* xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents:
27542
diff
changeset
|
9500 break; |
1d5c785bca99
* xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents:
27542
diff
changeset
|
9501 #else |
13898
dceb33c07f9e
(XTread_socket): Pass KeyPress events to the toolkit.
Richard M. Stallman <rms@gnu.org>
parents:
13884
diff
changeset
|
9502 goto OTHER; |
27619
1d5c785bca99
* xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents:
27542
diff
changeset
|
9503 #endif |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9504 |
27500
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
9505 case KeyRelease: |
27619
1d5c785bca99
* xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents:
27542
diff
changeset
|
9506 #ifdef HAVE_X_I18N |
1d5c785bca99
* xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents:
27542
diff
changeset
|
9507 /* Don't dispatch this event since XtDispatchEvent calls |
1d5c785bca99
* xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents:
27542
diff
changeset
|
9508 XFilterEvent, and two calls in a row may freeze the |
1d5c785bca99
* xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents:
27542
diff
changeset
|
9509 client. */ |
1d5c785bca99
* xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents:
27542
diff
changeset
|
9510 break; |
1d5c785bca99
* xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents:
27542
diff
changeset
|
9511 #else |
27500
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
9512 goto OTHER; |
27619
1d5c785bca99
* xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents:
27542
diff
changeset
|
9513 #endif |
27500
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
9514 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9515 /* 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
|
9516 FocusIn-EnterNotify FocusOut-LeaveNotify mess. If |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9517 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
|
9518 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
|
9519 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
|
9520 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
|
9521 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9522 case EnterNotify: |
24991
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 int from_menu_bar_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9525 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9526 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
|
9527 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9528 #ifdef LESSTIF_VERSION |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9529 /* 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
|
9530 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
|
9531 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
|
9532 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
|
9533 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
|
9534 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
|
9535 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
|
9536 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
|
9537 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
|
9538 value. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9539 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9540 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
|
9541 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
|
9542 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9543 (gerd, LessTif 0.88.1). */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9544 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9545 if (!event.xcrossing.focus |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9546 && f |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9547 && f->output_data.x->menubar_widget) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9548 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9549 Window focus; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9550 int revert; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9551 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9552 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
|
9553 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
|
9554 from_menu_bar_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9555 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9556 #endif /* LESSTIF_VERSION */ |
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 (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
|
9559 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9560 /* Avoid nasty pop/raise loops. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9561 if (f && (!(f->auto_raise) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9562 || !(f->auto_lower) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9563 || (event.xcrossing.time - enter_timestamp) > 500)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9564 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9565 x_new_focus_frame (dpyinfo, f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9566 enter_timestamp = event.xcrossing.time; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9567 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9568 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9569 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
|
9570 x_new_focus_frame (dpyinfo, 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9571 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9572 /* EnterNotify counts as mouse movement, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9573 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
|
9574 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
|
9575 note_mouse_movement (f, &event.xmotion); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9576 goto OTHER; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9577 } |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9578 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9579 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
|
9580 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
|
9581 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
|
9582 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
|
9583 if (f) |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
9584 x_new_focus_frame (dpyinfo, f); |
13205
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
9585 |
13232
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9586 #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
|
9587 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
|
9588 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
|
9589 #endif |
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9590 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9591 goto OTHER; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9592 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9593 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
|
9594 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
|
9595 if (f) |
7169
c21fcad6f1f5
(XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents:
7167
diff
changeset
|
9596 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9597 Lisp_Object frame; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9598 int from_menu_bar_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
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 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
|
9601 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9602 /* 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
|
9603 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
|
9604 clear_mouse_face (dpyinfo); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9605 dpyinfo->mouse_face_mouse_frame = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9606 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9607 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9608 /* 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
|
9609 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
|
9610 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
|
9611 the mouse leaves the frame. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9612 if (any_help_event_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9613 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9614 XSETFRAME (frame, f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9615 bufp->kind = HELP_EVENT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9616 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
|
9617 ++bufp, ++count, --numchars; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9618 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9619 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9620 #ifdef LESSTIF_VERSION |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9621 /* 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
|
9622 EnterNotify case. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9623 if (!event.xcrossing.focus |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9624 && f->output_data.x->menubar_widget) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9625 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9626 Window focus; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9627 int revert; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9628 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
|
9629 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
|
9630 from_menu_bar_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9631 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9632 #endif /* LESSTIF_VERSION */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9633 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9634 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
|
9635 x_mouse_leave (dpyinfo); |
7169
c21fcad6f1f5
(XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents:
7167
diff
changeset
|
9636 else |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9637 { |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
9638 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
|
9639 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
|
9640 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
|
9641 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
|
9642 } |
7169
c21fcad6f1f5
(XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents:
7167
diff
changeset
|
9643 } |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9644 goto OTHER; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9645 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9646 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
|
9647 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
|
9648 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
|
9649 && 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
|
9650 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
|
9651 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
|
9652 x_new_focus_frame (dpyinfo, 0); |
13205
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
9653 |
13232
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9654 #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
|
9655 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
|
9656 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
|
9657 #endif |
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9658 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9659 goto OTHER; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9660 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9661 case MotionNotify: |
286 | 9662 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9663 previous_help_echo = help_echo; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9664 help_echo = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9665 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9666 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
|
9667 && 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
|
9668 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
|
9669 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
|
9670 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
|
9671 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9672 if (f) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9673 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
|
9674 else |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9675 { |
25795
84921c27b2b5
(XTread_socket) <MotionNotify>: Change #ifdef
Gerd Moellmann <gerd@gnu.org>
parents:
25716
diff
changeset
|
9676 #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
|
9677 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
|
9678 = 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
|
9679 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9680 if (bar) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9681 x_scroll_bar_note_movement (bar, &event); |
25795
84921c27b2b5
(XTread_socket) <MotionNotify>: Change #ifdef
Gerd Moellmann <gerd@gnu.org>
parents:
25716
diff
changeset
|
9682 #endif /* USE_TOOLKIT_SCROLL_BARS */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9683 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9684 /* 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
|
9685 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
|
9686 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
|
9687 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9688 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9689 /* 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
|
9690 has changed, generate a HELP_EVENT. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9691 if (STRINGP (help_echo) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9692 || STRINGP (previous_help_echo)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9693 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9694 Lisp_Object frame; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9695 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9696 if (f) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9697 XSETFRAME (frame, f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9698 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9699 frame = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9700 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9701 any_help_event_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9702 bufp->kind = HELP_EVENT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9703 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
|
9704 ++bufp, ++count, --numchars; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9705 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9706 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9707 goto OTHER; |
286 | 9708 } |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9709 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9710 case ConfigureNotify: |
17953
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
9711 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
|
9712 if (f) |
3030
2c5ea1c98256
(XTread_socket): For ConfigureNotify event,
Richard M. Stallman <rms@gnu.org>
parents:
3016
diff
changeset
|
9713 { |
25716
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
9714 #ifndef USE_X_TOOLKIT |
24489
abf5b4802f9b
(XTread_socket) <ConfigureNotify>:
Karl Heuer <kwzh@gnu.org>
parents:
24484
diff
changeset
|
9715 int rows = PIXEL_TO_CHAR_HEIGHT (f, event.xconfigure.height); |
abf5b4802f9b
(XTread_socket) <ConfigureNotify>:
Karl Heuer <kwzh@gnu.org>
parents:
24484
diff
changeset
|
9716 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
|
9717 |
11436
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
9718 /* 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
|
9719 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
|
9720 of the EmacsFrame widget. */ |
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
9721 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9722 /* 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
|
9723 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
|
9724 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
|
9725 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
|
9726 || 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
|
9727 || 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
|
9728 || 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
|
9729 { |
25360
2f3ad0a21be5
Call change_frame_size and do_pending_window_change with
Gerd Moellmann <gerd@gnu.org>
parents:
25328
diff
changeset
|
9730 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
|
9731 SET_FRAME_GARBAGED (f); |
16491
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
9732 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
|
9733 } |
11436
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
9734 #endif |
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
9735 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
9736 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
|
9737 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
|
9738 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9739 /* 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
|
9740 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
|
9741 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
|
9742 &f->output_data.x->top_pos); |
d25d2472df51
(XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents:
17963
diff
changeset
|
9743 |
27500
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
9744 #ifdef HAVE_X_I18N |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
9745 if (FRAME_XIC (f) && (FRAME_XIC_STYLE (f) & XIMStatusArea)) |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
9746 xic_set_statusarea (f); |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
9747 #endif |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
9748 |
18008
d25d2472df51
(XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents:
17963
diff
changeset
|
9749 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
|
9750 { |
d25d2472df51
(XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents:
17963
diff
changeset
|
9751 /* 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
|
9752 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
|
9753 f->output_data.x->win_gravity = NorthWestGravity; |
d25d2472df51
(XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents:
17963
diff
changeset
|
9754 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
|
9755 } |
20182
9f3dd970927e
(XTread_socket): Check for bogus (0,0) location.
Karl Heuer <kwzh@gnu.org>
parents:
20180
diff
changeset
|
9756 #ifdef USE_MOTIF |
9f3dd970927e
(XTread_socket): Check for bogus (0,0) location.
Karl Heuer <kwzh@gnu.org>
parents:
20180
diff
changeset
|
9757 /* 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
|
9758 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
|
9759 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
|
9760 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
|
9761 { |
9f3dd970927e
(XTread_socket): Check for bogus (0,0) location.
Karl Heuer <kwzh@gnu.org>
parents:
20180
diff
changeset
|
9762 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
|
9763 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
|
9764 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9765 #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
|
9766 } |
11436
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
9767 goto OTHER; |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9768 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9769 case ButtonPress: |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9770 case ButtonRelease: |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
9771 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9772 /* 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
|
9773 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
|
9774 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
|
9775 int tool_bar_p = 0; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9776 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9777 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
|
9778 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
|
9779 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9780 if (dpyinfo->grabbed |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9781 && last_mouse_frame |
10274
83aaf59dabbe
(XTupdate_begin): Fix backward test in previous change.
Richard M. Stallman <rms@gnu.org>
parents:
10223
diff
changeset
|
9782 && 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
|
9783 f = last_mouse_frame; |
83aaf59dabbe
(XTupdate_begin): Fix backward test in previous change.
Richard M. Stallman <rms@gnu.org>
parents:
10223
diff
changeset
|
9784 else |
12657
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9785 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
|
9786 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9787 if (f) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9788 { |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
9789 /* 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
|
9790 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
|
9791 && 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
|
9792 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9793 Lisp_Object window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9794 int p, x, y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9795 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9796 x = event.xbutton.x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9797 y = event.xbutton.y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9798 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9799 /* Set x and y. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9800 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
|
9801 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
|
9802 { |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
9803 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
|
9804 tool_bar_p = 1; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9805 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9806 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9807 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
9808 if (!tool_bar_p) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9809 if (!dpyinfo->x_focus_frame |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9810 || f == dpyinfo->x_focus_frame) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9811 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
|
9812 } |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
9813 else |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
9814 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9815 #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
|
9816 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
|
9817 = 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
|
9818 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9819 if (bar) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9820 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
|
9821 #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
|
9822 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9823 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9824 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
|
9825 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9826 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
|
9827 last_mouse_frame = f; |
23643
701b6bdc7a22
(XTread_socket): ButtonPress clears f->mouse_moved.
Karl Heuer <kwzh@gnu.org>
parents:
23567
diff
changeset
|
9828 /* Ignore any mouse motion that happened |
701b6bdc7a22
(XTread_socket): ButtonPress clears f->mouse_moved.
Karl Heuer <kwzh@gnu.org>
parents:
23567
diff
changeset
|
9829 before this event; any subsequent mouse-movement |
701b6bdc7a22
(XTread_socket): ButtonPress clears f->mouse_moved.
Karl Heuer <kwzh@gnu.org>
parents:
23567
diff
changeset
|
9830 Emacs events should reflect only motion after |
701b6bdc7a22
(XTread_socket): ButtonPress clears f->mouse_moved.
Karl Heuer <kwzh@gnu.org>
parents:
23567
diff
changeset
|
9831 the ButtonPress. */ |
23701
6c0896abbbd4
(XTread_socket): Fix previous change in case F == 0.
Karl Heuer <kwzh@gnu.org>
parents:
23684
diff
changeset
|
9832 if (f != 0) |
6c0896abbbd4
(XTread_socket): Fix previous change in case F == 0.
Karl Heuer <kwzh@gnu.org>
parents:
23684
diff
changeset
|
9833 f->mouse_moved = 0; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9834 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
9835 if (!tool_bar_p) |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
9836 last_tool_bar_item = -1; |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9837 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9838 else |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9839 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9840 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
|
9841 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9842 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9843 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
|
9844 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9845 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
|
9846 bufp++; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9847 count++; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9848 numchars--; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9849 } |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
9850 |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
9851 #ifdef USE_X_TOOLKIT |
12657
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9852 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
|
9853 /* For a down-event in the menu bar, |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9854 don't pass it to Xt right now. |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9855 Instead, save it away |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9856 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
|
9857 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
|
9858 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
|
9859 /* 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
|
9860 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
|
9861 && event.xbutton.x >= 0 |
21b6b8f50143
(XTread_socket): Verify a ButtonPress was actually in the
Richard M. Stallman <rms@gnu.org>
parents:
13507
diff
changeset
|
9862 && 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
|
9863 && event.xbutton.y >= 0 |
21b6b8f50143
(XTread_socket): Verify a ButtonPress was actually in the
Richard M. Stallman <rms@gnu.org>
parents:
13507
diff
changeset
|
9864 && 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
|
9865 && event.xbutton.same_screen) |
12657
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9866 { |
15711
099dc465c948
(SET_SAVED_MENU_EVENT): New macro.
Karl Heuer <kwzh@gnu.org>
parents:
15639
diff
changeset
|
9867 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
|
9868 XSETFRAME (last_mouse_press_frame, f); |
15793
fc460a98a7f9
(last_mouse_press_frame): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15711
diff
changeset
|
9869 } |
15803
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
9870 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
|
9871 { |
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
9872 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
|
9873 goto OTHER; |
15803
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
9874 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9875 |
15803
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
9876 #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
|
9877 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
|
9878 else if (event.type == ButtonRelease) |
fc460a98a7f9
(last_mouse_press_frame): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15711
diff
changeset
|
9879 { |
15803
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
9880 if (!NILP (last_mouse_press_frame)) |
15794 | 9881 { |
15803
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
9882 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
|
9883 if (f->output_data.x) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9884 SET_SAVED_BUTTON_EVENT; |
15794 | 9885 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9886 else |
15808
3afa38a18102
(XTread_socket): Delete the code to pass menu bar keys
Richard M. Stallman <rms@gnu.org>
parents:
15806
diff
changeset
|
9887 goto OTHER; |
12657
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9888 } |
15803
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
9889 #endif /* USE_MOTIF */ |
12657
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9890 else |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9891 goto OTHER; |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
9892 #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
|
9893 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9894 break; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9895 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9896 case CirculateNotify: |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9897 goto OTHER; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9898 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9899 case CirculateRequest: |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9900 goto OTHER; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9901 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9902 case VisibilityNotify: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9903 goto OTHER; |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9904 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9905 case MappingNotify: |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9906 /* 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
|
9907 local cache. */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9908 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
|
9909 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9910 case MappingModifier: |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9911 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
|
9912 /* 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
|
9913 case MappingKeyboard: |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9914 XRefreshKeyboardMapping (&event.xmapping); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9915 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9916 goto OTHER; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9917 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9918 default: |
13898
dceb33c07f9e
(XTread_socket): Pass KeyPress events to the toolkit.
Richard M. Stallman <rms@gnu.org>
parents:
13884
diff
changeset
|
9919 OTHER: |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9920 #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
|
9921 BLOCK_INPUT; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9922 XtDispatchEvent (&event); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9923 UNBLOCK_INPUT; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9924 #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
|
9925 break; |
1436
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
9926 } |
286 | 9927 } |
9928 } | |
9929 | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9930 out:; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9931 |
8485
6e4b40c80021
(XTread_socket): Don't test X_IO_BUG; make that code unconditional.
Richard M. Stallman <rms@gnu.org>
parents:
8437
diff
changeset
|
9932 /* 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
|
9933 when the window is destroyed. Detect that. (1994.) */ |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
9934 if (! event_found) |
7916
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
9935 { |
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
9936 /* 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
|
9937 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
|
9938 B. Bretthauer, 1994 */ |
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
9939 x_noop_count++; |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
9940 if (x_noop_count >= 100) |
7916
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
9941 { |
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
9942 x_noop_count=0; |
12657
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9943 |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9944 if (next_noop_dpyinfo == 0) |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9945 next_noop_dpyinfo = x_display_list; |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9946 |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9947 XNoOp (next_noop_dpyinfo->display); |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9948 |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9949 /* 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
|
9950 next_noop_dpyinfo = next_noop_dpyinfo->next; |
7916
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
9951 } |
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
9952 } |
5753
eb44ecad5557
(XTread_socket): Add X_IO_BUG conditional.
Richard M. Stallman <rms@gnu.org>
parents:
5740
diff
changeset
|
9953 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9954 /* 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
|
9955 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
|
9956 /* ??? 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
|
9957 if (pending_autoraise_frame) |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
9958 { |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
9959 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
|
9960 pending_autoraise_frame = 0; |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
9961 } |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
9962 |
286 | 9963 UNBLOCK_INPUT; |
9964 return count; | |
9965 } | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9966 |
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 |
286 | 9969 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9970 /*********************************************************************** |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9971 Text Cursor |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9972 ***********************************************************************/ |
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 /* 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
|
9975 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
|
9976 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
|
9977 line after HPOS has been written. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9978 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9979 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9980 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
|
9981 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9982 int hpos, n; |
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 if (updated_area == TEXT_AREA |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9985 && 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
|
9986 && hpos <= w->phys_cursor.hpos |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9987 && (n < 0 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9988 || hpos + n > w->phys_cursor.hpos)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9989 w->phys_cursor_on_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9990 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9991 |
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 /* 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
|
9994 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
|
9995 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
|
9996 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
|
9997 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9998 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
|
9999 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
|
10000 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
|
10001 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10002 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10003 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
|
10004 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10005 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10006 GC gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10007 int whole_line_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10008 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10009 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
|
10010 XRectangle clip_rect; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10011 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
|
10012 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10013 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
|
10014 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10015 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
|
10016 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
|
10017 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
|
10018 clip_rect.width = window_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10019 clip_rect.height = row->visible_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10020 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10021 /* 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
|
10022 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
|
10023 if (whole_line_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10024 { |
25465 | 10025 clip_rect.x -= FRAME_X_LEFT_FLAGS_AREA_WIDTH (f); |
10026 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
|
10027 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10028 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10029 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
|
10030 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10031 |
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 /* 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
|
10034 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10035 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10036 x_draw_hollow_cursor (w, row) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10037 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10038 struct glyph_row *row; |
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 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
|
10041 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
|
10042 Display *dpy = FRAME_X_DISPLAY (f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10043 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
|
10044 XGCValues xgcv; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10045 struct glyph *cursor_glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10046 GC gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10047 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10048 /* 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
|
10049 coordinates. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10050 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
|
10051 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
|
10052 + row->ascent - w->phys_cursor_ascent); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10053 h = row->height - 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10054 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10055 /* 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
|
10056 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
|
10057 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
|
10058 if (cursor_glyph == NULL) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10059 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10060 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10061 /* 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
|
10062 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
|
10063 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
|
10064 width instead. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10065 wd = cursor_glyph->pixel_width - 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10066 if (cursor_glyph->type == STRETCH_GLYPH |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10067 && !x_stretch_cursor_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10068 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
|
10069 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10070 /* 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
|
10071 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
|
10072 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
|
10073 if (dpyinfo->scratch_cursor_gc) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10074 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
|
10075 else |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10076 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
|
10077 GCForeground, &xgcv); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10078 gc = dpyinfo->scratch_cursor_gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10079 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10080 /* 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
|
10081 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
|
10082 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
|
10083 XSetClipMask (dpy, gc, None); |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10087 /* 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
|
10088 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10089 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
|
10090 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
|
10091 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
|
10092 --gerd. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10093 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10094 static void |
28321
fc0a61d81fc5
(x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents:
28307
diff
changeset
|
10095 x_draw_bar_cursor (w, row, width) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10096 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10097 struct glyph_row *row; |
28321
fc0a61d81fc5
(x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents:
28307
diff
changeset
|
10098 int width; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10099 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10100 /* 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
|
10101 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
|
10102 glyphs and mini-buffer. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10103 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
|
10104 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10105 struct frame *f = XFRAME (w->frame); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10106 struct glyph *cursor_glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10107 GC gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10108 int x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10109 unsigned long mask; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10110 XGCValues xgcv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10111 Display *dpy; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10112 Window window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10113 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10114 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
|
10115 if (cursor_glyph == NULL) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10116 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10117 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10118 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
|
10119 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
|
10120 xgcv.graphics_exposures = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10121 mask = GCForeground | GCBackground | GCGraphicsExposures; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10122 dpy = FRAME_X_DISPLAY (f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10123 window = FRAME_X_WINDOW (f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10124 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
|
10125 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10126 if (gc) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10127 XChangeGC (dpy, gc, mask, &xgcv); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10128 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10129 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10130 gc = XCreateGC (dpy, window, mask, &xgcv); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10131 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
|
10132 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10133 |
28321
fc0a61d81fc5
(x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents:
28307
diff
changeset
|
10134 if (width < 0) |
fc0a61d81fc5
(x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents:
28307
diff
changeset
|
10135 width = f->output_data.x->cursor_width; |
fc0a61d81fc5
(x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents:
28307
diff
changeset
|
10136 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10137 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
|
10138 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
|
10139 XFillRectangle (dpy, window, gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10140 x, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10141 WINDOW_TO_FRAME_PIXEL_Y (w, w->phys_cursor.y), |
28321
fc0a61d81fc5
(x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents:
28307
diff
changeset
|
10142 min (cursor_glyph->pixel_width, width), |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10143 row->height); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10144 XSetClipMask (dpy, gc, None); |
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 |
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 /* 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
|
10150 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
|
10151 is is about to be rewritten. */ |
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 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10154 x_clear_cursor (w) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10155 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10156 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10157 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
|
10158 x_update_window_cursor (w, 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10159 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10160 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10161 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10162 /* 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
|
10163 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
|
10164 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10165 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10166 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
|
10167 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10168 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10169 enum draw_glyphs_face hl; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10170 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10171 /* 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
|
10172 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
|
10173 glyphs and mini-buffer. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10174 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
|
10175 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10176 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
|
10177 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
|
10178 hl, 0, 0, 0); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10179 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10180 /* 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
|
10181 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
|
10182 are redrawn. */ |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10183 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
|
10184 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10185 if (row > w->current_matrix->rows |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10186 && MATRIX_ROW_OVERLAPS_SUCC_P (row - 1)) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10187 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
|
10188 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10189 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
|
10190 && MATRIX_ROW_OVERLAPS_PRED_P (row + 1)) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10191 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
|
10192 } |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10193 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10194 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10195 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10196 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10197 /* 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
|
10198 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10199 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10200 x_erase_phys_cursor (w) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10201 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10202 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10203 struct frame *f = XFRAME (w->frame); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10204 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
|
10205 int hpos = w->phys_cursor.hpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10206 int vpos = w->phys_cursor.vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10207 int mouse_face_here_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10208 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
|
10209 struct glyph_row *cursor_row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10210 struct glyph *cursor_glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10211 enum draw_glyphs_face hl; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10212 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10213 /* 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
|
10214 screen. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10215 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
|
10216 goto mark_cursor_off; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10217 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10218 /* 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
|
10219 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
|
10220 if (vpos >= active_glyphs->nrows) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10221 goto mark_cursor_off; |
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 /* 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
|
10224 can do. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10225 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
|
10226 if (!cursor_row->enabled_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10227 goto mark_cursor_off; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10228 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10229 /* 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
|
10230 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
|
10231 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
|
10232 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
|
10233 cursor glyph at hand. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10234 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
|
10235 goto mark_cursor_off; |
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 /* 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
|
10238 we clear the cursor. */ |
28417
4b675266db04
* lisp.h (XCONS, XSTRING, XSYMBOL, XFLOAT, XPROCESS, XWINDOW, XSUBR, XBUFFER):
Ken Raeburn <raeburn@raeburn.org>
parents:
28356
diff
changeset
|
10239 if (! NILP (dpyinfo->mouse_face_window) |
4b675266db04
* lisp.h (XCONS, XSTRING, XSYMBOL, XFLOAT, XPROCESS, XWINDOW, XSUBR, XBUFFER):
Ken Raeburn <raeburn@raeburn.org>
parents:
28356
diff
changeset
|
10240 && 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
|
10241 && (vpos > dpyinfo->mouse_face_beg_row |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10242 || (vpos == dpyinfo->mouse_face_beg_row |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10243 && hpos >= dpyinfo->mouse_face_beg_col)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10244 && (vpos < dpyinfo->mouse_face_end_row |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10245 || (vpos == dpyinfo->mouse_face_end_row |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10246 && hpos < dpyinfo->mouse_face_end_col)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10247 /* 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
|
10248 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
|
10249 mouse highlighting does not. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10250 && cursor_row->used[TEXT_AREA] > hpos) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10251 mouse_face_here_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10252 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10253 /* 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
|
10254 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
|
10255 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10256 int x; |
25546 | 10257 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
|
10258 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10259 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
|
10260 if (cursor_glyph == NULL) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10261 goto mark_cursor_off; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10262 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10263 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
|
10264 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10265 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
|
10266 x, |
25546 | 10267 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
|
10268 cursor_row->y)), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10269 cursor_glyph->pixel_width, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10270 cursor_row->visible_height, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10271 False); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10272 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10273 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10274 /* 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
|
10275 if (mouse_face_here_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10276 hl = DRAW_MOUSE_FACE; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10277 else if (cursor_row->inverse_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10278 hl = DRAW_INVERSE_VIDEO; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10279 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10280 hl = DRAW_NORMAL_TEXT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10281 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
|
10282 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10283 mark_cursor_off: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10284 w->phys_cursor_on_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10285 w->phys_cursor_type = NO_CURSOR; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10286 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10287 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10288 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10289 /* 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
|
10290 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
|
10291 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
|
10292 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10293 void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10294 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
|
10295 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10296 int on, hpos, vpos, x, y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10297 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10298 struct frame *f = XFRAME (w->frame); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10299 int new_cursor_type; |
28321
fc0a61d81fc5
(x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents:
28307
diff
changeset
|
10300 int new_cursor_width; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10301 struct glyph_matrix *current_glyphs; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10302 struct glyph_row *glyph_row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10303 struct glyph *glyph; |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
10304 |
2235
80e0d36bbb77
* xterm.c (x_display_box_cursor, x_display_bar_cursor): Don't
Jim Blandy <jimb@redhat.com>
parents:
2195
diff
changeset
|
10305 /* 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
|
10306 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
|
10307 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
|
10308 window. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10309 if (! FRAME_VISIBLE_P (f) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10310 || FRAME_GARBAGED_P (f) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10311 || vpos >= w->current_matrix->nrows |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10312 || hpos >= w->current_matrix->matrix_w) |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
10313 return; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
10314 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
10315 /* 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
|
10316 if (!on && !w->phys_cursor_on_p) |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
10317 return; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
10318 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10319 current_glyphs = w->current_matrix; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10320 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
|
10321 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
|
10322 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10323 /* 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
|
10324 display the cursor. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10325 if (!glyph_row->enabled_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10326 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10327 w->phys_cursor_on_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10328 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10329 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10330 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10331 xassert (interrupt_input_blocked); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10332 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10333 /* 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
|
10334 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
|
10335 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
|
10336 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
|
10337 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
|
10338 box cursor. */ |
28321
fc0a61d81fc5
(x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents:
28307
diff
changeset
|
10339 new_cursor_width = -1; |
25191
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10340 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
|
10341 && 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
|
10342 && 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
|
10343 { |
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10344 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
|
10345 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
|
10346 else |
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10347 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
|
10348 } |
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10349 else |
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10350 { |
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10351 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
|
10352 || 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
|
10353 { |
27844
72e15185eeb5
(x_display_and_set_cursor): Display cursor of
Gerd Moellmann <gerd@gnu.org>
parents:
27619
diff
changeset
|
10354 extern int cursor_in_non_selected_windows; |
72e15185eeb5
(x_display_and_set_cursor): Display cursor of
Gerd Moellmann <gerd@gnu.org>
parents:
27619
diff
changeset
|
10355 |
72e15185eeb5
(x_display_and_set_cursor): Display cursor of
Gerd Moellmann <gerd@gnu.org>
parents:
27619
diff
changeset
|
10356 if (MINI_WINDOW_P (w) || !cursor_in_non_selected_windows) |
25191
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10357 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
|
10358 else |
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10359 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
|
10360 } |
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10361 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
|
10362 new_cursor_type = NO_CURSOR; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10363 else |
28321
fc0a61d81fc5
(x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents:
28307
diff
changeset
|
10364 { |
fc0a61d81fc5
(x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents:
28307
diff
changeset
|
10365 struct buffer *b = XBUFFER (w->buffer); |
fc0a61d81fc5
(x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents:
28307
diff
changeset
|
10366 |
fc0a61d81fc5
(x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents:
28307
diff
changeset
|
10367 if (EQ (b->cursor_type, Qt)) |
fc0a61d81fc5
(x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents:
28307
diff
changeset
|
10368 new_cursor_type = FRAME_DESIRED_CURSOR (f); |
fc0a61d81fc5
(x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents:
28307
diff
changeset
|
10369 else |
fc0a61d81fc5
(x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents:
28307
diff
changeset
|
10370 new_cursor_type = x_specified_cursor_type (b->cursor_type, |
fc0a61d81fc5
(x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents:
28307
diff
changeset
|
10371 &new_cursor_width); |
fc0a61d81fc5
(x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents:
28307
diff
changeset
|
10372 } |
25191
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10373 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10374 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10375 /* 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
|
10376 it is in the wrong place, or the cursor type is not what we want, |
286 | 10377 erase it. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10378 if (w->phys_cursor_on_p |
286 | 10379 && (!on |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10380 || w->phys_cursor.x != x |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10381 || w->phys_cursor.y != y |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10382 || 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
|
10383 x_erase_phys_cursor (w); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10384 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10385 /* 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
|
10386 display it. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10387 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
|
10388 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10389 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
|
10390 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
|
10391 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10392 /* 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
|
10393 of them may need the information. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10394 w->phys_cursor.x = x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10395 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
|
10396 w->phys_cursor.hpos = hpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10397 w->phys_cursor.vpos = vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10398 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
|
10399 w->phys_cursor_on_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10400 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10401 switch (new_cursor_type) |
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 case HOLLOW_BOX_CURSOR: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10404 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
|
10405 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10406 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10407 case FILLED_BOX_CURSOR: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10408 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
|
10409 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10410 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10411 case BAR_CURSOR: |
28321
fc0a61d81fc5
(x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents:
28307
diff
changeset
|
10412 x_draw_bar_cursor (w, glyph_row, new_cursor_width); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10413 break; |
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 case NO_CURSOR: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10416 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10417 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10418 default: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10419 abort (); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10420 } |
27619
1d5c785bca99
* xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents:
27542
diff
changeset
|
10421 |
1d5c785bca99
* xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents:
27542
diff
changeset
|
10422 #ifdef HAVE_X_I18N |
1d5c785bca99
* xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents:
27542
diff
changeset
|
10423 if (w == XWINDOW (f->selected_window)) |
1d5c785bca99
* xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents:
27542
diff
changeset
|
10424 if (FRAME_XIC (f) && (FRAME_XIC_STYLE (f) & XIMPreeditPosition)) |
1d5c785bca99
* xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents:
27542
diff
changeset
|
10425 xic_set_preeditarea (w, x, y); |
1d5c785bca99
* xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents:
27542
diff
changeset
|
10426 #endif |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10427 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10428 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10429 #ifndef XFlush |
771 | 10430 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
|
10431 XFlush (FRAME_X_DISPLAY (f)); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10432 #endif |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10433 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10434 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10435 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10436 /* 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
|
10437 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
|
10438 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
|
10439 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
|
10440 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
|
10441 |
21514 | 10442 void |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10443 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
|
10444 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10445 int on, hpos, vpos, x, y; |
286 | 10446 { |
5872
6389c826f847
(x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents:
5825
diff
changeset
|
10447 BLOCK_INPUT; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10448 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
|
10449 UNBLOCK_INPUT; |
80a5aedfb4c7
(XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents:
12192
diff
changeset
|
10450 } |
80a5aedfb4c7
(XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents:
12192
diff
changeset
|
10451 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10452 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10453 /* 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
|
10454 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
|
10455 |
21514 | 10456 void |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10457 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
|
10458 struct frame *f; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10459 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10460 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
|
10461 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10462 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10463 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10464 /* 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
|
10465 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
|
10466 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10467 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10468 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
|
10469 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10470 int on_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10471 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10472 while (w) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10473 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10474 if (!NILP (w->hchild)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10475 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
|
10476 else if (!NILP (w->vchild)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10477 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
|
10478 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10479 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
|
10480 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10481 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
|
10482 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10483 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10484 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10485 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10486 /* 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
|
10487 of ON. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10488 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10489 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10490 x_update_window_cursor (w, on) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10491 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
|
10492 int on; |
80a5aedfb4c7
(XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents:
12192
diff
changeset
|
10493 { |
28183
7d97c6fbc3d9
(x_update_window_cursor): Don't update in frames
Gerd Moellmann <gerd@gnu.org>
parents:
28142
diff
changeset
|
10494 /* Don't update cursor in windows whose frame is in the process |
7d97c6fbc3d9
(x_update_window_cursor): Don't update in frames
Gerd Moellmann <gerd@gnu.org>
parents:
28142
diff
changeset
|
10495 of being deleted. */ |
7d97c6fbc3d9
(x_update_window_cursor): Don't update in frames
Gerd Moellmann <gerd@gnu.org>
parents:
28142
diff
changeset
|
10496 if (w->current_matrix) |
7d97c6fbc3d9
(x_update_window_cursor): Don't update in frames
Gerd Moellmann <gerd@gnu.org>
parents:
28142
diff
changeset
|
10497 { |
7d97c6fbc3d9
(x_update_window_cursor): Don't update in frames
Gerd Moellmann <gerd@gnu.org>
parents:
28142
diff
changeset
|
10498 BLOCK_INPUT; |
7d97c6fbc3d9
(x_update_window_cursor): Don't update in frames
Gerd Moellmann <gerd@gnu.org>
parents:
28142
diff
changeset
|
10499 x_display_and_set_cursor (w, on, w->phys_cursor.hpos, w->phys_cursor.vpos, |
7d97c6fbc3d9
(x_update_window_cursor): Don't update in frames
Gerd Moellmann <gerd@gnu.org>
parents:
28142
diff
changeset
|
10500 w->phys_cursor.x, w->phys_cursor.y); |
7d97c6fbc3d9
(x_update_window_cursor): Don't update in frames
Gerd Moellmann <gerd@gnu.org>
parents:
28142
diff
changeset
|
10501 UNBLOCK_INPUT; |
7d97c6fbc3d9
(x_update_window_cursor): Don't update in frames
Gerd Moellmann <gerd@gnu.org>
parents:
28142
diff
changeset
|
10502 } |
286 | 10503 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10504 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10505 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10506 |
286 | 10507 |
10508 /* Icons. */ | |
10509 | |
771 | 10510 /* 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
|
10511 when we get an expose event for it. */ |
286 | 10512 |
21514 | 10513 void |
771 | 10514 refreshicon (f) |
10515 struct frame *f; | |
286 | 10516 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10517 /* Normally, the window manager handles this function. */ |
286 | 10518 } |
10519 | |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
10520 /* Make the x-window of frame F use the gnu icon bitmap. */ |
286 | 10521 |
10522 int | |
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
10523 x_bitmap_icon (f, file) |
771 | 10524 struct frame *f; |
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
10525 Lisp_Object file; |
286 | 10526 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10527 int bitmap_id; |
286 | 10528 |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
10529 if (FRAME_X_WINDOW (f) == 0) |
286 | 10530 return 1; |
10531 | |
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
10532 /* 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
|
10533 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
|
10534 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
|
10535 f->output_data.x->icon_bitmap = 0; |
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
10536 |
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
10537 if (STRINGP (file)) |
9542
f8b7a65a94bc
(x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents:
9537
diff
changeset
|
10538 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
|
10539 else |
f8b7a65a94bc
(x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents:
9537
diff
changeset
|
10540 { |
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
10541 /* 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
|
10542 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
|
10543 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
|
10544 = 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
|
10545 gnu_width, gnu_height); |
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
10546 |
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
10547 /* 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
|
10548 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
|
10549 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
|
10550 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
|
10551 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
|
10552 |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
10553 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
|
10554 } |
f8b7a65a94bc
(x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents:
9537
diff
changeset
|
10555 |
f8b7a65a94bc
(x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents:
9537
diff
changeset
|
10556 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
|
10557 f->output_data.x->icon_bitmap = bitmap_id; |
286 | 10558 |
10559 return 0; | |
10560 } | |
10561 | |
10562 | |
12074
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10563 /* 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
|
10564 Use ICON_NAME as the text. */ |
286 | 10565 |
10566 int | |
771 | 10567 x_text_icon (f, icon_name) |
10568 struct frame *f; | |
286 | 10569 char *icon_name; |
10570 { | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
10571 if (FRAME_X_WINDOW (f) == 0) |
286 | 10572 return 1; |
10573 | |
12074
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10574 #ifdef HAVE_X11R4 |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10575 { |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10576 XTextProperty text; |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10577 text.value = (unsigned char *) icon_name; |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10578 text.encoding = XA_STRING; |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10579 text.format = 8; |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10580 text.nitems = strlen (icon_name); |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10581 #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
|
10582 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
|
10583 &text); |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10584 #else /* not USE_X_TOOLKIT */ |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10585 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
|
10586 #endif /* not USE_X_TOOLKIT */ |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10587 } |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10588 #else /* not HAVE_X11R4 */ |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10589 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
|
10590 #endif /* not HAVE_X11R4 */ |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
10591 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
10592 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
|
10593 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
|
10594 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
|
10595 x_wm_set_icon_pixmap (f, 0); |
286 | 10596 |
10597 return 0; | |
10598 } | |
10599 | |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10600 #define X_ERROR_MESSAGE_SIZE 200 |
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 non-nil, this should be a string. |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10603 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
|
10604 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10605 static Lisp_Object x_error_message_string; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10606 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10607 /* 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
|
10608 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
|
10609 x_catch_errors is in effect. */ |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10610 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10611 static void |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10612 x_error_catcher (display, error) |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10613 Display *display; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10614 XErrorEvent *error; |
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 XGetErrorText (display, error->error_code, |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10617 XSTRING (x_error_message_string)->data, |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10618 X_ERROR_MESSAGE_SIZE); |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10619 } |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10620 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10621 /* 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
|
10622 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
|
10623 operating on. |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10624 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10625 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
|
10626 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
|
10627 stored in x_error_message_string. |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10628 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10629 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
|
10630 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
|
10631 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10632 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
|
10633 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10634 void x_check_errors (); |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10635 static Lisp_Object x_catch_errors_unwind (); |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10636 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10637 int |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10638 x_catch_errors (dpy) |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10639 Display *dpy; |
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 int count = specpdl_ptr - specpdl; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10642 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10643 /* 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
|
10644 XSync (dpy, False); |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10645 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10646 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
|
10647 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10648 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
|
10649 XSTRING (x_error_message_string)->data[0] = 0; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10650 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10651 return count; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10652 } |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10653 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10654 /* 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
|
10655 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10656 static Lisp_Object |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10657 x_catch_errors_unwind (old_val) |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10658 Lisp_Object old_val; |
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 x_error_message_string = old_val; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10661 return Qnil; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10662 } |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10663 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10664 /* 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
|
10665 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
|
10666 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
|
10667 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10668 void |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10669 x_check_errors (dpy, format) |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10670 Display *dpy; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10671 char *format; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10672 { |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10673 /* 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
|
10674 XSync (dpy, False); |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10675 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10676 if (XSTRING (x_error_message_string)->data[0]) |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10677 error (format, XSTRING (x_error_message_string)->data); |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10678 } |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10679 |
17953
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10680 /* 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
|
10681 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
|
10682 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10683 int |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10684 x_had_errors_p (dpy) |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10685 Display *dpy; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10686 { |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10687 /* 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
|
10688 XSync (dpy, False); |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10689 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10690 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
|
10691 } |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10692 |
17953
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10693 /* 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
|
10694 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10695 void |
17953
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10696 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
|
10697 Display *dpy; |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10698 { |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10699 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
|
10700 } |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10701 |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10702 /* 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
|
10703 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
|
10704 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
|
10705 the corresponding call to x_catch_errors. */ |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10706 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10707 void |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10708 x_uncatch_errors (dpy, count) |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10709 Display *dpy; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10710 int count; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10711 { |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10712 unbind_to (count, Qnil); |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10713 } |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10714 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10715 #if 0 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10716 static unsigned int x_wire_count; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10717 x_trace_wire () |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10718 { |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10719 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
|
10720 } |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10721 #endif /* ! 0 */ |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10722 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10723 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10724 /* 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
|
10725 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
|
10726 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
|
10727 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
|
10728 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
|
10729 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10730 static SIGTYPE |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10731 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
|
10732 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
|
10733 { |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10734 #ifdef USG |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10735 /* USG systems forget handlers when they are used; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10736 must reestablish each time */ |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10737 signal (signalnum, x_connection_signal); |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10738 #endif /* USG */ |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10739 } |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10740 |
621 | 10741 /* Handling X errors. */ |
10742 | |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10743 /* 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
|
10744 |
621 | 10745 static SIGTYPE |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10746 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
|
10747 Display *display; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10748 char *error_message; |
621 | 10749 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10750 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
|
10751 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
|
10752 |
14489
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
10753 /* 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
|
10754 |
28030
c5b68e855d56
(x_connection_closed) [USE_X_TOOLKIT]: Don't try to
Gerd Moellmann <gerd@gnu.org>
parents:
27991
diff
changeset
|
10755 #if 0 /* Closing the display caused a bus error on OpenWindows. */ |
17825
281d99590839
(dumpglyphs): Draw glyphs one by one if the font for
Kenichi Handa <handa@m17n.org>
parents:
17720
diff
changeset
|
10756 #ifdef USE_X_TOOLKIT |
16179
7f8ce4d3e955
(x_connection_closed): Call XtCloseDisplay.
Richard M. Stallman <rms@gnu.org>
parents:
16104
diff
changeset
|
10757 XtCloseDisplay (display); |
17825
281d99590839
(dumpglyphs): Draw glyphs one by one if the font for
Kenichi Handa <handa@m17n.org>
parents:
17720
diff
changeset
|
10758 #endif |
28030
c5b68e855d56
(x_connection_closed) [USE_X_TOOLKIT]: Don't try to
Gerd Moellmann <gerd@gnu.org>
parents:
27991
diff
changeset
|
10759 #endif |
16179
7f8ce4d3e955
(x_connection_closed): Call XtCloseDisplay.
Richard M. Stallman <rms@gnu.org>
parents:
16104
diff
changeset
|
10760 |
14489
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
10761 dpyinfo->display = 0; |
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
10762 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10763 /* 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
|
10764 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
|
10765 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
|
10766 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10767 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
|
10768 minibuf_frame |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10769 = 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
|
10770 if (FRAME_X_P (XFRAME (frame)) |
bf33c9179a6b
(x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents:
10755
diff
changeset
|
10771 && FRAME_X_P (XFRAME (minibuf_frame)) |
bf33c9179a6b
(x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents:
10755
diff
changeset
|
10772 && ! EQ (frame, minibuf_frame) |
bf33c9179a6b
(x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents:
10755
diff
changeset
|
10773 && 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
|
10774 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
|
10775 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10776 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10777 /* 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
|
10778 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
|
10779 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
|
10780 FOR_EACH_FRAME (tail, frame) |
10921
bf33c9179a6b
(x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents:
10755
diff
changeset
|
10781 if (FRAME_X_P (XFRAME (frame)) |
bf33c9179a6b
(x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents:
10755
diff
changeset
|
10782 && 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
|
10783 { |
0d37c1e81c0d
(x_connection_closed): Unblock input, first thing.
Karl Heuer <kwzh@gnu.org>
parents:
11901
diff
changeset
|
10784 /* 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
|
10785 trying to find a replacement. */ |
0d37c1e81c0d
(x_connection_closed): Unblock input, first thing.
Karl Heuer <kwzh@gnu.org>
parents:
11901
diff
changeset
|
10786 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
|
10787 Fdelete_frame (frame, Qt); |
0d37c1e81c0d
(x_connection_closed): Unblock input, first thing.
Karl Heuer <kwzh@gnu.org>
parents:
11901
diff
changeset
|
10788 } |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10789 |
13727
9eb09adbcb38
(x_connection_closed): Don't delete dpyinfo if it's null.
Karl Heuer <kwzh@gnu.org>
parents:
13633
diff
changeset
|
10790 if (dpyinfo) |
9eb09adbcb38
(x_connection_closed): Don't delete dpyinfo if it's null.
Karl Heuer <kwzh@gnu.org>
parents:
13633
diff
changeset
|
10791 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
|
10792 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10793 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
|
10794 { |
15515
69257ac25af4
(x_connection_closed): Add newline when printing error message on stderr.
Richard M. Stallman <rms@gnu.org>
parents:
15514
diff
changeset
|
10795 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
|
10796 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
|
10797 exit (70); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10798 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10799 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10800 /* 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
|
10801 #ifdef SIGIO |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10802 sigunblock (sigmask (SIGIO)); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10803 #endif |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10804 sigunblock (sigmask (SIGALRM)); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10805 TOTALLY_UNBLOCK_INPUT; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10806 |
15526
926ef4afc174
(x_connection_closed): Call clear_waiting_for_input.
Richard M. Stallman <rms@gnu.org>
parents:
15521
diff
changeset
|
10807 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
|
10808 error ("%s", error_message); |
621 | 10809 } |
10810 | |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10811 /* 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
|
10812 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
|
10813 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
|
10814 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10815 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
|
10816 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
|
10817 Display *display; |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
10818 XErrorEvent *error; |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
10819 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10820 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
|
10821 |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
10822 /* 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
|
10823 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
|
10824 |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
10825 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
|
10826 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
|
10827 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
|
10828 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
|
10829 } |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
10830 |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10831 /* 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
|
10832 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
|
10833 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10834 static int |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10835 x_error_handler (display, error) |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10836 Display *display; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10837 XErrorEvent *error; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10838 { |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10839 if (! NILP (x_error_message_string)) |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10840 x_error_catcher (display, error); |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10841 else |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10842 x_error_quitter (display, error); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10843 return 0; |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10844 } |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10845 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10846 /* 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
|
10847 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
|
10848 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
|
10849 |
1875
f569bc4e9b8f
* xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents:
1841
diff
changeset
|
10850 static int |
f569bc4e9b8f
* xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents:
1841
diff
changeset
|
10851 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
|
10852 Display *display; |
f569bc4e9b8f
* xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents:
1841
diff
changeset
|
10853 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10854 char buf[256]; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10855 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10856 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
|
10857 x_connection_closed (display, buf); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10858 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
|
10859 } |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10860 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
10861 /* 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
|
10862 |
8291
9c6ddd14996b
(struct font_info): New field full_name.
Richard M. Stallman <rms@gnu.org>
parents:
8279
diff
changeset
|
10863 /* 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
|
10864 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
|
10865 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
|
10866 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
|
10867 |
3076
e3b3c67cf203
Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents:
3066
diff
changeset
|
10868 Lisp_Object |
771 | 10869 x_new_font (f, fontname) |
10870 struct frame *f; | |
286 | 10871 register char *fontname; |
10872 { | |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10873 struct font_info *fontp |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
10874 = FS_LOAD_FONT (f, 0, fontname, -1); |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10875 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10876 if (!fontp) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10877 return Qnil; |
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 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
|
10880 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
|
10881 f->output_data.x->fontset = -1; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10882 |
9167
8ad448b29c1c
(x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents:
9101
diff
changeset
|
10883 /* 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
|
10884 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
|
10885 { |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
10886 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
|
10887 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
|
10888 } |
8ad448b29c1c
(x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents:
9101
diff
changeset
|
10889 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
|
10890 { |
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
|
10891 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
|
10892 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
|
10893 } |
9167
8ad448b29c1c
(x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents:
9101
diff
changeset
|
10894 |
771 | 10895 /* 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
|
10896 if (FRAME_X_WINDOW (f) != 0) |
286 | 10897 { |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
10898 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
|
10899 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
|
10900 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
|
10901 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
|
10902 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
|
10903 f->output_data.x->font->fid); |
771 | 10904 |
6767
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
10905 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
|
10906 x_set_window_size (f, 0, f->width, f->height); |
286 | 10907 } |
6767
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
10908 else |
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
10909 /* 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
|
10910 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
|
10911 f->output_data.x->line_height = FONT_HEIGHT (f->output_data.x->font); |
286 | 10912 |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10913 return build_string (fontp->full_name); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10914 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10915 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10916 /* 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
|
10917 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
|
10918 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
|
10919 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
|
10920 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10921 Lisp_Object |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10922 x_new_fontset (f, fontsetname) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10923 struct frame *f; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10924 char *fontsetname; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10925 { |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
10926 int fontset = fs_query_fontset (build_string (fontsetname), 0); |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10927 Lisp_Object result; |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
10928 char *fontname; |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10929 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10930 if (fontset < 0) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10931 return Qnil; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10932 |
18347
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
10933 if (f->output_data.x->fontset == fontset) |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
10934 /* 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
|
10935 to do. */ |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
10936 return fontset_name (fontset); |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
10937 |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
10938 result = x_new_font (f, (XSTRING (fontset_ascii (fontset))->data)); |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10939 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10940 if (!STRINGP (result)) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10941 /* Can't load ASCII font. */ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10942 return Qnil; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10943 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10944 /* 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
|
10945 f->output_data.x->fontset = fontset; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10946 |
27500
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10947 #ifdef HAVE_X_I18N |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10948 if (FRAME_XIC (f) |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10949 && (FRAME_XIC_STYLE (f) & (XIMPreeditPosition | XIMStatusArea))) |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
10950 xic_set_xfontset (f, XSTRING (fontset_ascii (fontset))->data); |
27500
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10951 #endif |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10952 |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10953 return build_string (fontsetname); |
286 | 10954 } |
27500
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10955 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10956 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10957 /*********************************************************************** |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10958 X Input Methods |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10959 ***********************************************************************/ |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10960 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10961 #ifdef HAVE_X_I18N |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10962 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10963 #ifdef HAVE_X11R6 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10964 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10965 /* XIM destroy callback function, which is called whenever the |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10966 connection to input method XIM dies. CLIENT_DATA contains a |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10967 pointer to the x_display_info structure corresponding to XIM. */ |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10968 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10969 static void |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10970 xim_destroy_callback (xim, client_data, call_data) |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10971 XIM xim; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10972 XPointer client_data; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10973 XPointer call_data; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10974 { |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10975 struct x_display_info *dpyinfo = (struct x_display_info *) client_data; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10976 Lisp_Object frame, tail; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10977 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10978 BLOCK_INPUT; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10979 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10980 /* No need to call XDestroyIC.. */ |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10981 FOR_EACH_FRAME (tail, frame) |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10982 { |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10983 struct frame *f = XFRAME (frame); |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10984 if (FRAME_X_DISPLAY_INFO (f) == dpyinfo) |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10985 { |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10986 FRAME_XIC (f) = NULL; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10987 if (FRAME_XIC_FONTSET (f)) |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10988 { |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10989 XFreeFontSet (FRAME_X_DISPLAY (f), FRAME_XIC_FONTSET (f)); |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10990 FRAME_XIC_FONTSET (f) = NULL; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10991 } |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10992 } |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10993 } |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10994 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10995 /* No need to call XCloseIM. */ |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10996 dpyinfo->xim = NULL; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10997 XFree (dpyinfo->xim_styles); |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10998 UNBLOCK_INPUT; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10999 } |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11000 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11001 #endif /* HAVE_X11R6 */ |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11002 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11003 /* Open the connection to the XIM server on display DPYINFO. |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11004 RESOURCE_NAME is the resource name Emacs uses. */ |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11005 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11006 static void |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11007 xim_open_dpy (dpyinfo, resource_name) |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11008 struct x_display_info *dpyinfo; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11009 char *resource_name; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11010 { |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11011 XIM xim; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11012 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11013 xim = XOpenIM (dpyinfo->display, dpyinfo->xrdb, resource_name, EMACS_CLASS); |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11014 dpyinfo->xim = xim; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11015 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11016 if (xim) |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11017 { |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11018 #ifdef HAVE_X11R6 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11019 XIMCallback destroy; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11020 #endif |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11021 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11022 /* Get supported styles and XIM values. */ |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11023 XGetIMValues (xim, XNQueryInputStyle, &dpyinfo->xim_styles, NULL); |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11024 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11025 #ifdef HAVE_X11R6 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11026 destroy.callback = xim_destroy_callback; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11027 destroy.client_data = (XPointer)dpyinfo; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11028 XSetIMValues (xim, XNDestroyCallback, &destroy, NULL); |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11029 #endif |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11030 } |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11031 } |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11032 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11033 |
28142
156c32f18198
(xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents:
28139
diff
changeset
|
11034 #ifdef HAVE_X11R6_XIM |
27500
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11035 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11036 struct xim_inst_t |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11037 { |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11038 struct x_display_info *dpyinfo; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11039 char *resource_name; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11040 }; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11041 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11042 /* XIM instantiate callback function, which is called whenever an XIM |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11043 server is available. DISPLAY is teh display of the XIM. |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11044 CLIENT_DATA contains a pointer to an xim_inst_t structure created |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11045 when the callback was registered. */ |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11046 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11047 static void |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11048 xim_instantiate_callback (display, client_data, call_data) |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11049 Display *display; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11050 XPointer client_data; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11051 XPointer call_data; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11052 { |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11053 struct xim_inst_t *xim_inst = (struct xim_inst_t *) client_data; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11054 struct x_display_info *dpyinfo = xim_inst->dpyinfo; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11055 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11056 /* We don't support multiple XIM connections. */ |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11057 if (dpyinfo->xim) |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11058 return; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11059 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11060 xim_open_dpy (dpyinfo, xim_inst->resource_name); |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11061 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11062 /* Create XIC for the existing frames on the same display, as long |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11063 as they have no XIC. */ |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11064 if (dpyinfo->xim && dpyinfo->reference_count > 0) |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11065 { |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11066 Lisp_Object tail, frame; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11067 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11068 BLOCK_INPUT; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11069 FOR_EACH_FRAME (tail, frame) |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11070 { |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11071 struct frame *f = XFRAME (frame); |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11072 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11073 if (FRAME_X_DISPLAY_INFO (f) == xim_inst->dpyinfo) |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11074 if (FRAME_XIC (f) == NULL) |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11075 { |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11076 create_frame_xic (f); |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11077 if (FRAME_XIC_STYLE (f) & XIMStatusArea) |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11078 xic_set_statusarea (f); |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11079 if (FRAME_XIC_STYLE (f) & XIMPreeditPosition) |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11080 { |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11081 struct window *w = XWINDOW (f->selected_window); |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11082 xic_set_preeditarea (w, w->cursor.x, w->cursor.y); |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11083 } |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11084 } |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11085 } |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11086 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11087 UNBLOCK_INPUT; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11088 } |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11089 } |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11090 |
28142
156c32f18198
(xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents:
28139
diff
changeset
|
11091 #endif /* HAVE_X11R6_XIM */ |
27500
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11092 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11093 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11094 /* Open a connection to the XIM server on display DPYINFO. |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11095 RESOURCE_NAME is the resource name for Emacs. On X11R5, open the |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11096 connection only at the first time. On X11R6, open the connection |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11097 in the XIM instantiate callback function. */ |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11098 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11099 static void |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11100 xim_initialize (dpyinfo, resource_name) |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11101 struct x_display_info *dpyinfo; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11102 char *resource_name; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11103 { |
28142
156c32f18198
(xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents:
28139
diff
changeset
|
11104 #ifdef HAVE_X11R6_XIM |
27500
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11105 struct xim_inst_t *xim_inst; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11106 int len; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11107 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11108 dpyinfo->xim = NULL; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11109 xim_inst = (struct xim_inst_t *) xmalloc (sizeof (struct xim_inst_t)); |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11110 xim_inst->dpyinfo = dpyinfo; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11111 len = strlen (resource_name); |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11112 xim_inst->resource_name = (char *) xmalloc (len + 1); |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11113 bcopy (resource_name, xim_inst->resource_name, len + 1); |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11114 XRegisterIMInstantiateCallback (dpyinfo->display, dpyinfo->xrdb, |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11115 resource_name, EMACS_CLASS, |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11116 xim_instantiate_callback, |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11117 (XPointer)xim_inst); |
28142
156c32f18198
(xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents:
28139
diff
changeset
|
11118 #else /* not HAVE_X11R6_XIM */ |
27500
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11119 dpyinfo->xim = NULL; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11120 xim_open_dpy (dpyinfo, resource_name); |
28142
156c32f18198
(xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents:
28139
diff
changeset
|
11121 #endif /* not HAVE_X11R6_XIM */ |
27500
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11122 } |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11123 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11124 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11125 /* Close the connection to the XIM server on display DPYINFO. */ |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11126 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11127 static void |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11128 xim_close_dpy (dpyinfo) |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11129 struct x_display_info *dpyinfo; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11130 { |
28142
156c32f18198
(xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents:
28139
diff
changeset
|
11131 #ifdef HAVE_X11R6_XIM |
27500
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11132 XUnregisterIMInstantiateCallback (dpyinfo->display, dpyinfo->xrdb, |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11133 NULL, EMACS_CLASS, |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11134 xim_instantiate_callback, NULL); |
28142
156c32f18198
(xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents:
28139
diff
changeset
|
11135 #endif /* not HAVE_X11R6_XIM */ |
27500
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11136 XCloseIM (dpyinfo->xim); |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11137 dpyinfo->xim = NULL; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11138 XFree (dpyinfo->xim_styles); |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11139 } |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11140 |
28142
156c32f18198
(xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents:
28139
diff
changeset
|
11141 #endif /* not HAVE_X11R6_XIM */ |
27500
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11142 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11143 |
286 | 11144 |
14826
eec0abb31126
Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents:
14801
diff
changeset
|
11145 /* Calculate the absolute position in frame F |
eec0abb31126
Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents:
14801
diff
changeset
|
11146 from its current recorded position values and gravity. */ |
eec0abb31126
Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents:
14801
diff
changeset
|
11147 |
21514 | 11148 void |
7264
a701bffa0f9d
(x_calc_absolute_position): Use size_hint_flags.
Richard M. Stallman <rms@gnu.org>
parents:
7262
diff
changeset
|
11149 x_calc_absolute_position (f) |
771 | 11150 struct frame *f; |
286 | 11151 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11152 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
|
11153 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
|
11154 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
|
11155 int this_window; |
507a45c7e911
(x_calc_absolute_position): Use menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11807
diff
changeset
|
11156 |
17953
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11157 /* 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
|
11158 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
|
11159 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
|
11160 return; |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11161 |
11896
507a45c7e911
(x_calc_absolute_position): Use menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11807
diff
changeset
|
11162 #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
|
11163 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
|
11164 #else |
507a45c7e911
(x_calc_absolute_position): Use menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11807
diff
changeset
|
11165 this_window = FRAME_X_WINDOW (f); |
507a45c7e911
(x_calc_absolute_position): Use menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11807
diff
changeset
|
11166 #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
|
11167 |
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
11168 /* 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
|
11169 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
|
11170 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
|
11171 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
|
11172 { |
17953
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11173 int count; |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11174 |
4630
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
11175 BLOCK_INPUT; |
17953
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11176 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
|
11177 while (1) |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11178 { |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11179 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
|
11180 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
|
11181 |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11182 /* 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
|
11183 this_window, |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11184 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
|
11185 |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11186 /* 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
|
11187 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
|
11188 |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11189 /* Child of win. */ |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11190 &child); |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11191 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
|
11192 { |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11193 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
|
11194 Window *newchildren; |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11195 int nchildren; |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11196 |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11197 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
|
11198 &newparent, &newchildren, &nchildren)) |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11199 break; |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11200 |
23107
44eda932afcf
(x_calc_absolute_position): Cast argument to XFree, in
Karl Heuer <kwzh@gnu.org>
parents:
23095
diff
changeset
|
11201 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
|
11202 |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11203 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
|
11204 } |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11205 else |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11206 break; |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11207 } |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11208 |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11209 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
|
11210 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
|
11211 } |
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
11212 |
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
11213 /* 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
|
11214 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
|
11215 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
|
11216 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
|
11217 - 2 * f->output_data.x->border_width - win_x |
eec0abb31126
Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents:
14801
diff
changeset
|
11218 - PIXEL_WIDTH (f) |
eec0abb31126
Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents:
14801
diff
changeset
|
11219 + f->output_data.x->left_pos); |
771 | 11220 |
7262
68fc80bf10df
(x_wm_set_size_hint): Don't try to handle negative positions.
Richard M. Stallman <rms@gnu.org>
parents:
7210
diff
changeset
|
11221 if (flags & YNegative) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11222 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11223 int menubar_height = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11224 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11225 #ifdef USE_X_TOOLKIT |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11226 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
|
11227 menubar_height |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11228 = (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
|
11229 + 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
|
11230 #endif |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11231 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11232 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
|
11233 - 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
|
11234 - win_y |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11235 - PIXEL_HEIGHT (f) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11236 - menubar_height |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11237 + f->output_data.x->top_pos); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11238 } |
14826
eec0abb31126
Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents:
14801
diff
changeset
|
11239 |
7409
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
11240 /* 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
|
11241 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
|
11242 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
|
11243 f->output_data.x->size_hint_flags &= ~ (XNegative | YNegative); |
286 | 11244 } |
11245 | |
7409
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
11246 /* 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
|
11247 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
|
11248 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
|
11249 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
|
11250 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
|
11251 |
21514 | 11252 void |
6934
e0ab4f59004e
(dumpglyphs): When HL=2, check explicitly for using
Richard M. Stallman <rms@gnu.org>
parents:
6883
diff
changeset
|
11253 x_set_offset (f, xoff, yoff, change_gravity) |
771 | 11254 struct frame *f; |
286 | 11255 register int xoff, yoff; |
6934
e0ab4f59004e
(dumpglyphs): When HL=2, check explicitly for using
Richard M. Stallman <rms@gnu.org>
parents:
6883
diff
changeset
|
11256 int change_gravity; |
286 | 11257 { |
11901
8ecc60a02138
(x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents:
11896
diff
changeset
|
11258 int modified_top, modified_left; |
8ecc60a02138
(x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents:
11896
diff
changeset
|
11259 |
11988
a1ce6f699967
(x_set_offset): Distinguish CHANGE_GRAVITY < 0 case.
Karl Heuer <kwzh@gnu.org>
parents:
11953
diff
changeset
|
11260 if (change_gravity > 0) |
7409
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
11261 { |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11262 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
|
11263 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
|
11264 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
|
11265 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
|
11266 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
|
11267 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
|
11268 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
|
11269 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
|
11270 } |
7264
a701bffa0f9d
(x_calc_absolute_position): Use size_hint_flags.
Richard M. Stallman <rms@gnu.org>
parents:
7262
diff
changeset
|
11271 x_calc_absolute_position (f); |
286 | 11272 |
11273 BLOCK_INPUT; | |
11915
e2ab839155e1
(XTflash): Use pointers as args to select.
Karl Heuer <kwzh@gnu.org>
parents:
11904
diff
changeset
|
11274 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
|
11275 |
17519
5aa7011aa3d5
(x_set_offset): Turn off the code that added the border_width
Richard M. Stallman <rms@gnu.org>
parents:
17371
diff
changeset
|
11276 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
|
11277 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
|
11278 #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
|
11279 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
|
11280 /* 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
|
11281 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
|
11282 if (change_gravity != 0) |
11901
8ecc60a02138
(x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents:
11896
diff
changeset
|
11283 { |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11284 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
|
11285 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
|
11286 } |
17519
5aa7011aa3d5
(x_set_offset): Turn off the code that added the border_width
Richard M. Stallman <rms@gnu.org>
parents:
17371
diff
changeset
|
11287 #endif |
11901
8ecc60a02138
(x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents:
11896
diff
changeset
|
11288 |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11289 #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
|
11290 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
|
11291 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
|
11292 #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
|
11293 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
|
11294 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
|
11295 #endif /* not USE_X_TOOLKIT */ |
286 | 11296 UNBLOCK_INPUT; |
11297 } | |
11298 | |
5825
b1f35db748d8
(x_make_frame_invisible): Add USE_X_TOOLKIT conditional.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5753
diff
changeset
|
11299 /* 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
|
11300 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
|
11301 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
|
11302 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
|
11303 |
21514 | 11304 void |
5825
b1f35db748d8
(x_make_frame_invisible): Add USE_X_TOOLKIT conditional.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5753
diff
changeset
|
11305 x_set_window_size (f, change_gravity, cols, rows) |
771 | 11306 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
|
11307 int change_gravity; |
976
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
11308 int cols, rows; |
286 | 11309 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11310 #ifndef USE_X_TOOLKIT |
286 | 11311 int pixelwidth, pixelheight; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11312 #endif |
14692
e93656946a8c
(x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents:
14557
diff
changeset
|
11313 |
e93656946a8c
(x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents:
14557
diff
changeset
|
11314 BLOCK_INPUT; |
286 | 11315 |
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
|
11316 #ifdef USE_X_TOOLKIT |
7415
fbea5637a4b4
(x_set_window_size) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents:
7409
diff
changeset
|
11317 { |
fbea5637a4b4
(x_set_window_size) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents:
7409
diff
changeset
|
11318 /* 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
|
11319 call to XtSetValues within EmacsFrameSetCharSize. |
fbea5637a4b4
(x_set_window_size) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents:
7409
diff
changeset
|
11320 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
|
11321 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
|
11322 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
|
11323 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
|
11324 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
|
11325 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
|
11326 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
|
11327 } |
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
|
11328 |
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
|
11329 #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
|
11330 |
976
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
11331 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
|
11332 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
|
11333 = (!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
|
11334 ? 0 |
8ad448b29c1c
(x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents:
9101
diff
changeset
|
11335 : 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
|
11336 ? 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
|
11337 : (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
|
11338 f->output_data.x->flags_areas_extra |
25465 | 11339 = 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
|
11340 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
|
11341 pixelheight = CHAR_TO_PIXEL_HEIGHT (f, rows); |
286 | 11342 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11343 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
|
11344 x_wm_set_size_hint (f, (long) 0, 0); |
8781
98741404d3e0
Delete X11 conditionals.
Richard M. Stallman <rms@gnu.org>
parents:
8724
diff
changeset
|
11345 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11346 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
|
11347 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
|
11348 pixelwidth, pixelheight); |
976
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
11349 |
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
11350 /* 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
|
11351 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
|
11352 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
|
11353 ConfigureNotify event gets here. |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11354 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11355 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
|
11356 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
|
11357 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
|
11358 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
|
11359 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
|
11360 |
1c02364724aa
(x_set_window_size): When calling change_frame_size, specify 1 for DELAY.
Richard M. Stallman <rms@gnu.org>
parents:
25101
diff
changeset
|
11361 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
|
11362 a BLOCK_INPUT. */ |
25360
2f3ad0a21be5
Call change_frame_size and do_pending_window_change with
Gerd Moellmann <gerd@gnu.org>
parents:
25328
diff
changeset
|
11363 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
|
11364 PIXEL_WIDTH (f) = pixelwidth; |
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
11365 PIXEL_HEIGHT (f) = pixelheight; |
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
11366 |
14692
e93656946a8c
(x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents:
14557
diff
changeset
|
11367 /* 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
|
11368 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
|
11369 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
|
11370 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
|
11371 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
|
11372 |
e93656946a8c
(x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents:
14557
diff
changeset
|
11373 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
|
11374 |
e93656946a8c
(x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents:
14557
diff
changeset
|
11375 #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
|
11376 |
7651
1569a13efdcd
(x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents:
7602
diff
changeset
|
11377 /* 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
|
11378 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
|
11379 |
14692
e93656946a8c
(x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents:
14557
diff
changeset
|
11380 /* 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
|
11381 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
|
11382 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
|
11383 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
|
11384 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
|
11385 |
286 | 11386 UNBLOCK_INPUT; |
11387 } | |
11388 | |
12172
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
11389 /* Mouse warping. */ |
286 | 11390 |
7026
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
11391 void |
771 | 11392 x_set_mouse_position (f, x, y) |
11393 struct frame *f; | |
286 | 11394 int x, y; |
11395 { | |
11396 int pix_x, pix_y; | |
11397 | |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11398 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
|
11399 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
|
11400 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
11401 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
|
11402 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
|
11403 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
11404 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
|
11405 if (pix_y > PIXEL_HEIGHT (f)) pix_y = PIXEL_HEIGHT (f); |
286 | 11406 |
11407 BLOCK_INPUT; | |
11408 | |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11409 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
|
11410 0, 0, 0, 0, pix_x, pix_y); |
286 | 11411 UNBLOCK_INPUT; |
11412 } | |
11413 | |
7026
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
11414 /* 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
|
11415 |
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
11416 void |
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
11417 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
|
11418 struct frame *f; |
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
11419 int pix_x, pix_y; |
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
11420 { |
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
11421 BLOCK_INPUT; |
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
11422 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11423 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
|
11424 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
|
11425 UNBLOCK_INPUT; |
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
11426 } |
12172
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
11427 |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
11428 /* focus shifting, raising and lowering. */ |
7026
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
11429 |
21514 | 11430 void |
771 | 11431 x_focus_on_frame (f) |
11432 struct frame *f; | |
286 | 11433 { |
5156
fd78458b8c43
(XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents:
5018
diff
changeset
|
11434 #if 0 /* This proves to be unpleasant. */ |
771 | 11435 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
|
11436 #endif |
369 | 11437 #if 0 |
11438 /* I don't think that the ICCCM allows programs to do things like this | |
11439 without the interaction of the window manager. Whatever you end up | |
771 | 11440 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
|
11441 XSetInputFocus (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
286 | 11442 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
|
11443 #endif /* ! 0 */ |
286 | 11444 } |
11445 | |
21514 | 11446 void |
771 | 11447 x_unfocus_frame (f) |
11448 struct frame *f; | |
286 | 11449 { |
369 | 11450 #if 0 |
771 | 11451 /* 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
|
11452 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
|
11453 XSetInputFocus (FRAME_X_DISPLAY (f), PointerRoot, |
286 | 11454 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
|
11455 #endif /* ! 0 */ |
286 | 11456 } |
11457 | |
771 | 11458 /* Raise frame F. */ |
11459 | |
21514 | 11460 void |
771 | 11461 x_raise_frame (f) |
11462 struct frame *f; | |
286 | 11463 { |
1658
452ba03935d7
* xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents:
1530
diff
changeset
|
11464 if (f->async_visible) |
286 | 11465 { |
11466 BLOCK_INPUT; | |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11467 #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
|
11468 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
|
11469 #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
|
11470 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
|
11471 #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
|
11472 XFlush (FRAME_X_DISPLAY (f)); |
286 | 11473 UNBLOCK_INPUT; |
11474 } | |
11475 } | |
11476 | |
771 | 11477 /* Lower frame F. */ |
11478 | |
21514 | 11479 void |
771 | 11480 x_lower_frame (f) |
11481 struct frame *f; | |
286 | 11482 { |
1658
452ba03935d7
* xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents:
1530
diff
changeset
|
11483 if (f->async_visible) |
286 | 11484 { |
11485 BLOCK_INPUT; | |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11486 #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
|
11487 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
|
11488 #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
|
11489 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
|
11490 #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
|
11491 XFlush (FRAME_X_DISPLAY (f)); |
286 | 11492 UNBLOCK_INPUT; |
11493 } | |
11494 } | |
11495 | |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11496 static void |
14411
bac274f178b0
(XTframe_raise_lower): Rename arg `raise' to `raise_flag'.
Richard M. Stallman <rms@gnu.org>
parents:
14305
diff
changeset
|
11497 XTframe_raise_lower (f, raise_flag) |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11498 FRAME_PTR f; |
14411
bac274f178b0
(XTframe_raise_lower): Rename arg `raise' to `raise_flag'.
Richard M. Stallman <rms@gnu.org>
parents:
14305
diff
changeset
|
11499 int raise_flag; |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11500 { |
14411
bac274f178b0
(XTframe_raise_lower): Rename arg `raise' to `raise_flag'.
Richard M. Stallman <rms@gnu.org>
parents:
14305
diff
changeset
|
11501 if (raise_flag) |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11502 x_raise_frame (f); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11503 else |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11504 x_lower_frame (f); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11505 } |
12172
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
11506 |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
11507 /* Change of visibility. */ |
286 | 11508 |
12192
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
11509 /* 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
|
11510 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
|
11511 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
|
11512 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
|
11513 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
|
11514 finishes with it. */ |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
11515 |
21514 | 11516 void |
771 | 11517 x_make_frame_visible (f) |
11518 struct frame *f; | |
286 | 11519 { |
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
11520 Lisp_Object type; |
17963
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11521 int original_top, original_left; |
286 | 11522 |
429 | 11523 BLOCK_INPUT; |
11524 | |
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
11525 type = x_icon_type (f); |
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
11526 if (!NILP (type)) |
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
11527 x_bitmap_icon (f, type); |
9446
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
11528 |
771 | 11529 if (! FRAME_VISIBLE_P (f)) |
286 | 11530 { |
17963
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11531 /* 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
|
11532 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
|
11533 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
|
11534 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
|
11535 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
|
11536 && ! 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
|
11537 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
|
11538 |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11539 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
|
11540 |
429 | 11541 if (! EQ (Vx_no_window_manager, Qt)) |
771 | 11542 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
|
11543 #ifdef USE_X_TOOLKIT |
7167
2fa74c48e4e5
(x_make_frame_visible): Use XtMapWidget, not XtPopup.
Richard M. Stallman <rms@gnu.org>
parents:
7128
diff
changeset
|
11544 /* 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
|
11545 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
|
11546 #else /* not USE_X_TOOLKIT */ |
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
11547 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
|
11548 #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
|
11549 #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
|
11550 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
|
11551 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
|
11552 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
|
11553 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
|
11554 #endif |
429 | 11555 } |
286 | 11556 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11557 XFlush (FRAME_X_DISPLAY (f)); |
429 | 11558 |
7959
224440646fa7
(make_frame_visible): At end, wait till Emacs sees frame is visible.
Richard M. Stallman <rms@gnu.org>
parents:
7935
diff
changeset
|
11559 /* 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
|
11560 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
|
11561 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
|
11562 { |
224440646fa7
(make_frame_visible): At end, wait till Emacs sees frame is visible.
Richard M. Stallman <rms@gnu.org>
parents:
7935
diff
changeset
|
11563 Lisp_Object frame; |
27040
900a02429efa
(x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents:
27000
diff
changeset
|
11564 int count; |
18528
73f4d9258f04
(x_make_frame_visible): Check has_been_visible
Richard M. Stallman <rms@gnu.org>
parents:
18347
diff
changeset
|
11565 /* 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
|
11566 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
|
11567 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
|
11568 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
|
11569 |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11570 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
|
11571 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
|
11572 |
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
11573 /* This must come after we set COUNT. */ |
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
11574 UNBLOCK_INPUT; |
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
11575 |
22907
43e290c6fb19
(x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents:
22773
diff
changeset
|
11576 /* 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
|
11577 |
18008
d25d2472df51
(XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents:
17963
diff
changeset
|
11578 /* 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
|
11579 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
|
11580 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
|
11581 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
|
11582 |
73f4d9258f04
(x_make_frame_visible): Check has_been_visible
Richard M. Stallman <rms@gnu.org>
parents:
18347
diff
changeset
|
11583 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
|
11584 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
|
11585 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
|
11586 |
18630
3e414b9da546
(x_make_frame_visible): Don't move the frame
Richard M. Stallman <rms@gnu.org>
parents:
18528
diff
changeset
|
11587 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
|
11588 && 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
|
11589 && previously_visible) |
17963
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11590 { |
22907
43e290c6fb19
(x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents:
22773
diff
changeset
|
11591 Drawable rootw; |
43e290c6fb19
(x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents:
22773
diff
changeset
|
11592 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
|
11593 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
|
11594 |
17963
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11595 BLOCK_INPUT; |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11596 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11597 /* 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
|
11598 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
|
11599 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
|
11600 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
|
11601 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
|
11602 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
|
11603 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
|
11604 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
|
11605 &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
|
11606 |
43e290c6fb19
(x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents:
22773
diff
changeset
|
11607 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
|
11608 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
|
11609 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
|
11610 |
17963
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11611 UNBLOCK_INPUT; |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11612 } |
17953
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11613 |
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
11614 XSETFRAME (frame, f); |
9337
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
11615 |
27040
900a02429efa
(x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents:
27000
diff
changeset
|
11616 /* 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
|
11617 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
|
11618 MapNotify at all.. */ |
900a02429efa
(x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents:
27000
diff
changeset
|
11619 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
|
11620 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
|
11621 { |
27040
900a02429efa
(x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents:
27000
diff
changeset
|
11622 /* 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
|
11623 x_sync (f); |
27040
900a02429efa
(x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents:
27000
diff
changeset
|
11624 |
900a02429efa
(x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents:
27000
diff
changeset
|
11625 /* 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
|
11626 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
|
11627 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
|
11628 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
|
11629 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
|
11630 probably a bug. */ |
8682
42f95b1368ea
(x_make_frame_visible): Call input_polling_used.
Richard M. Stallman <rms@gnu.org>
parents:
8652
diff
changeset
|
11631 if (input_polling_used ()) |
8652 | 11632 { |
27040
900a02429efa
(x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents:
27000
diff
changeset
|
11633 /* 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
|
11634 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
|
11635 handler reset it. */ |
27428
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
11636 int old_poll_suppress_count = poll_suppress_count; |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
11637 poll_suppress_count = 1; |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
11638 poll_for_input_1 (); |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
11639 poll_suppress_count = old_poll_suppress_count; |
8652 | 11640 } |
27040
900a02429efa
(x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents:
27000
diff
changeset
|
11641 |
900a02429efa
(x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents:
27000
diff
changeset
|
11642 /* 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
|
11643 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
|
11644 } |
7959
224440646fa7
(make_frame_visible): At end, wait till Emacs sees frame is visible.
Richard M. Stallman <rms@gnu.org>
parents:
7935
diff
changeset
|
11645 } |
286 | 11646 } |
11647 | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11648 /* Change from mapped state to withdrawn state. */ |
286 | 11649 |
12172
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
11650 /* Make the frame visible (mapped and not iconified). */ |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
11651 |
21514 | 11652 void |
771 | 11653 x_make_frame_invisible (f) |
11654 struct frame *f; | |
286 | 11655 { |
7602
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11656 Window window; |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11657 |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11658 #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
|
11659 /* 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
|
11660 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
|
11661 #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
|
11662 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
|
11663 #endif /* not USE_X_TOOLKIT */ |
286 | 11664 |
3284
a47979ffad1e
(XTread_socket): For UnmapNotify, if frame was visible,
Richard M. Stallman <rms@gnu.org>
parents:
3282
diff
changeset
|
11665 /* 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
|
11666 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
|
11667 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
|
11668 |
6983
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
11669 #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
|
11670 if (! f->async_visible && ! f->async_iconified) |
286 | 11671 return; |
6983
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
11672 #endif |
286 | 11673 |
11674 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
|
11675 |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11676 /* 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
|
11677 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
|
11678 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
|
11679 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
|
11680 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
|
11681 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
|
11682 |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
11683 #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
|
11684 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11685 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
|
11686 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
|
11687 { |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
11688 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
|
11689 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
|
11690 } |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
11691 #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
|
11692 |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
11693 /* Tell the window manager what we're going to do. */ |
286 | 11694 if (! EQ (Vx_no_window_manager, Qt)) |
11695 { | |
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11696 XEvent unmap; |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11697 |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11698 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
|
11699 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
|
11700 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
|
11701 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
|
11702 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
|
11703 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
|
11704 False, |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11705 SubstructureRedirectMaskSubstructureNotifyMask, |
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11706 &unmap)) |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11707 { |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11708 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
|
11709 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
|
11710 } |
286 | 11711 } |
11712 | |
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11713 /* 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
|
11714 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
|
11715 #endif /* ! defined (HAVE_X11R4) */ |
286 | 11716 |
6983
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
11717 /* 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
|
11718 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
|
11719 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
|
11720 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
|
11721 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
|
11722 f->visible = 0; |
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
11723 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
|
11724 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
|
11725 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
|
11726 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11727 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
|
11728 |
286 | 11729 UNBLOCK_INPUT; |
11730 } | |
11731 | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11732 /* Change window state from mapped to iconified. */ |
286 | 11733 |
21514 | 11734 void |
771 | 11735 x_iconify_frame (f) |
11736 struct frame *f; | |
286 | 11737 { |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11738 int result; |
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
11739 Lisp_Object type; |
286 | 11740 |
3284
a47979ffad1e
(XTread_socket): For UnmapNotify, if frame was visible,
Richard M. Stallman <rms@gnu.org>
parents:
3282
diff
changeset
|
11741 /* 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
|
11742 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
|
11743 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
|
11744 |
1658
452ba03935d7
* xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents:
1530
diff
changeset
|
11745 if (f->async_iconified) |
286 | 11746 return; |
11747 | |
9446
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
11748 BLOCK_INPUT; |
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
11749 |
13627
8873aa3451dd
(XTmouse_position): Exit the loop if child == win.
Richard M. Stallman <rms@gnu.org>
parents:
13598
diff
changeset
|
11750 FRAME_SAMPLE_VISIBILITY (f); |
8873aa3451dd
(XTmouse_position): Exit the loop if child == win.
Richard M. Stallman <rms@gnu.org>
parents:
13598
diff
changeset
|
11751 |
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
11752 type = x_icon_type (f); |
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
11753 if (!NILP (type)) |
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
11754 x_bitmap_icon (f, type); |
9446
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
11755 |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11756 #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
|
11757 |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11758 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
|
11759 { |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11760 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
|
11761 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
|
11762 /* 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
|
11763 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
|
11764 /* 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
|
11765 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
|
11766 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
|
11767 f->iconified = 1; |
16753
ab63a77c3a23
(x_iconify_frame): Clear visible when we set iconified.
Richard M. Stallman <rms@gnu.org>
parents:
16491
diff
changeset
|
11768 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
|
11769 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
|
11770 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
|
11771 UNBLOCK_INPUT; |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11772 return; |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11773 } |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11774 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11775 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
|
11776 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
|
11777 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
|
11778 UNBLOCK_INPUT; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11779 |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11780 if (!result) |
7602
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11781 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
|
11782 |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11783 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
|
11784 f->async_visible = 0; |
ab63a77c3a23
(x_iconify_frame): Clear visible when we set iconified.
Richard M. Stallman <rms@gnu.org>
parents:
16491
diff
changeset
|
11785 |
5740
48da4ed089e9
(x_iconify_frame): Fix misbalanced BLOCK_INPUT/UNBLOCK_INPUT.
Karl Heuer <kwzh@gnu.org>
parents:
5737
diff
changeset
|
11786 |
48da4ed089e9
(x_iconify_frame): Fix misbalanced BLOCK_INPUT/UNBLOCK_INPUT.
Karl Heuer <kwzh@gnu.org>
parents:
5737
diff
changeset
|
11787 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
|
11788 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
|
11789 UNBLOCK_INPUT; |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11790 #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
|
11791 |
7738
a810335742bb
(x_iconify_frame): Call x_set_offset,
Richard M. Stallman <rms@gnu.org>
parents:
7706
diff
changeset
|
11792 /* 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
|
11793 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
|
11794 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
|
11795 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
|
11796 |
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11797 /* 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
|
11798 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
|
11799 |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11800 /* 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
|
11801 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
|
11802 { |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11803 XEvent message; |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
11804 |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
11805 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
|
11806 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
|
11807 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
|
11808 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
|
11809 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
|
11810 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11811 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
|
11812 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
|
11813 False, |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11814 SubstructureRedirectMask | SubstructureNotifyMask, |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11815 &message)) |
286 | 11816 { |
11817 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
|
11818 error ("Can't notify window manager of iconification"); |
286 | 11819 } |
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11820 } |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11821 |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
11822 /* 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
|
11823 IconicState. */ |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11824 x_wm_set_window_state (f, IconicState); |
286 | 11825 |
4304
b5014da888a8
(x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents:
4277
diff
changeset
|
11826 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
|
11827 { |
b5014da888a8
(x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents:
4277
diff
changeset
|
11828 /* 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
|
11829 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
|
11830 } |
b5014da888a8
(x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents:
4277
diff
changeset
|
11831 |
1658
452ba03935d7
* xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents:
1530
diff
changeset
|
11832 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
|
11833 f->async_visible = 0; |
286 | 11834 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11835 XFlush (FRAME_X_DISPLAY (f)); |
286 | 11836 UNBLOCK_INPUT; |
5740
48da4ed089e9
(x_iconify_frame): Fix misbalanced BLOCK_INPUT/UNBLOCK_INPUT.
Karl Heuer <kwzh@gnu.org>
parents:
5737
diff
changeset
|
11837 #endif /* not USE_X_TOOLKIT */ |
286 | 11838 } |
12172
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
11839 |
1810
bf618128d973
* xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents:
1803
diff
changeset
|
11840 /* 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
|
11841 |
21514 | 11842 void |
1810
bf618128d973
* xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents:
1803
diff
changeset
|
11843 x_destroy_window (f) |
771 | 11844 struct frame *f; |
286 | 11845 { |
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
11846 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
|
11847 |
286 | 11848 BLOCK_INPUT; |
1810
bf618128d973
* xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents:
1803
diff
changeset
|
11849 |
14489
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
11850 /* 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
|
11851 commands to the X server. */ |
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
11852 if (dpyinfo->display != 0) |
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
11853 { |
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
11854 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
|
11855 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
|
11856 #ifdef HAVE_X_I18N |
27500
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11857 if (FRAME_XIC (f)) |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11858 free_frame_xic (f); |
14830
34db919835d3
(x_destroy_window) [HAVE_X_I18N]: Free xic and xim of frame.
Richard M. Stallman <rms@gnu.org>
parents:
14826
diff
changeset
|
11859 #endif |
14489
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
11860 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
|
11861 #ifdef USE_X_TOOLKIT |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11862 if (f->output_data.x->widget) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11863 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
|
11864 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
|
11865 #endif /* USE_X_TOOLKIT */ |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11866 |
14489
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
11867 free_frame_faces (f); |
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
11868 XFlush (FRAME_X_DISPLAY (f)); |
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
11869 } |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11870 |
17575 | 11871 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
|
11872 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
|
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 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
|
11875 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
|
11876 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
|
11877 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
|
11878 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
|
11879 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
|
11880 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
|
11881 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
|
11882 |
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
11883 dpyinfo->reference_count--; |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
11884 |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
11885 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
|
11886 { |
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
11887 dpyinfo->mouse_face_beg_row |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
11888 = dpyinfo->mouse_face_beg_col = -1; |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
11889 dpyinfo->mouse_face_end_row |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
11890 = dpyinfo->mouse_face_end_col = -1; |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
11891 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
|
11892 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
|
11893 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
|
11894 } |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11895 |
1810
bf618128d973
* xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents:
1803
diff
changeset
|
11896 UNBLOCK_INPUT; |
286 | 11897 } |
11898 | |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
11899 /* Setting window manager hints. */ |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
11900 |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11901 /* 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
|
11902 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
|
11903 that the window now has. |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11904 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
|
11905 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
|
11906 |
21514 | 11907 void |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11908 x_wm_set_size_hint (f, flags, user_position) |
771 | 11909 struct frame *f; |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11910 long flags; |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11911 int user_position; |
286 | 11912 { |
11913 XSizeHints size_hints; | |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11914 |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11915 #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
|
11916 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
|
11917 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
|
11918 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
|
11919 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
|
11920 #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
|
11921 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
|
11922 #endif /* not USE_X_TOOLKIT */ |
286 | 11923 |
7187
ca0102511d80
(x_wm_set_size_hint): Don't set PMaxSize.
Richard M. Stallman <rms@gnu.org>
parents:
7169
diff
changeset
|
11924 /* 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
|
11925 size_hints.flags = PResizeInc | PMinSize /* | PMaxSize */; |
286 | 11926 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11927 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
|
11928 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
|
11929 |
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
|
11930 #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
|
11931 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
|
11932 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
|
11933 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
|
11934 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
|
11935 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
|
11936 #else /* not USE_X_TOOLKIT */ |
771 | 11937 size_hints.height = PIXEL_HEIGHT (f); |
11938 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
|
11939 #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
|
11940 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11941 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
|
11942 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
|
11943 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
|
11944 = 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
|
11945 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
|
11946 = 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
|
11947 |
12189 | 11948 /* Calculate the base and minimum sizes. |
11949 | |
11950 (When we use the X toolkit, we don't do it here. | |
11951 Instead we copy the values that the widgets are using, below.) */ | |
11952 #ifndef USE_X_TOOLKIT | |
976
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
11953 { |
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
|
11954 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
|
11955 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
|
11956 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
11957 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
|
11958 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
|
11959 |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11960 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
|
11961 |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11962 /* 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
|
11963 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
|
11964 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
|
11965 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
|
11966 zero-row, zero-column frame. |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
11967 |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11968 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
|
11969 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
|
11970 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
|
11971 |
cd3d59155bf7
* xterm.c (x_wm_set_size_hint): Set the base_width and base_height
Jim Blandy <jimb@redhat.com>
parents:
1077
diff
changeset
|
11972 #ifdef HAVE_X11R4 |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11973 size_hints.flags |= PBaseSize; |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11974 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
|
11975 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
|
11976 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
|
11977 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
|
11978 #else |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11979 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
|
11980 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
|
11981 #endif |
976
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
11982 } |
286 | 11983 |
12189 | 11984 /* 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
|
11985 if (flags) |
286 | 11986 { |
12189 | 11987 size_hints.flags |= flags; |
11988 goto no_read; | |
11989 } | |
11990 #endif /* not USE_X_TOOLKIT */ | |
11991 | |
11992 { | |
11993 XSizeHints hints; /* Sometimes I hate X Windows... */ | |
11994 long supplied_return; | |
11995 int value; | |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11996 |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11997 #ifdef HAVE_X11R4 |
12189 | 11998 value = XGetWMNormalHints (FRAME_X_DISPLAY (f), window, &hints, |
11999 &supplied_return); | |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
12000 #else |
12189 | 12001 value = XGetNormalHints (FRAME_X_DISPLAY (f), window, &hints); |
12002 #endif | |
12003 | |
12004 #ifdef USE_X_TOOLKIT | |
12005 size_hints.base_height = hints.base_height; | |
12006 size_hints.base_width = hints.base_width; | |
12007 size_hints.min_height = hints.min_height; | |
12008 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
|
12009 #endif |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
12010 |
12189 | 12011 if (flags) |
12012 size_hints.flags |= flags; | |
12013 else | |
12014 { | |
12015 if (value == 0) | |
12016 hints.flags = 0; | |
12017 if (hints.flags & PSize) | |
12018 size_hints.flags |= PSize; | |
12019 if (hints.flags & PPosition) | |
12020 size_hints.flags |= PPosition; | |
12021 if (hints.flags & USPosition) | |
12022 size_hints.flags |= USPosition; | |
12023 if (hints.flags & USSize) | |
12024 size_hints.flags |= USSize; | |
12025 } | |
12026 } | |
12027 | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12028 #ifndef USE_X_TOOLKIT |
12189 | 12029 no_read: |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12030 #endif |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
12031 |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
12032 #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
|
12033 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
|
12034 size_hints.flags |= PWinGravity; |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
12035 |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
12036 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
|
12037 { |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
12038 size_hints.flags &= ~ PPosition; |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
12039 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
|
12040 } |
4777
21ed9c9bb210
(w_wn_set_size_hint): Make recent window gravity addition
Brian Fox <bfox@gnu.org>
parents:
4696
diff
changeset
|
12041 #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
|
12042 |
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
|
12043 #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
|
12044 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
|
12045 #else |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12046 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
|
12047 #endif |
286 | 12048 } |
12049 | |
12050 /* Used for IconicState or NormalState */ | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12051 |
21514 | 12052 void |
771 | 12053 x_wm_set_window_state (f, state) |
12054 struct frame *f; | |
286 | 12055 int state; |
12056 { | |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12057 #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
|
12058 Arg al[1]; |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
12059 |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
12060 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
|
12061 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
|
12062 #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
|
12063 Window window = FRAME_X_WINDOW (f); |
286 | 12064 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
12065 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
|
12066 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
|
12067 |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
12068 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
|
12069 #endif /* not USE_X_TOOLKIT */ |
286 | 12070 } |
12071 | |
21514 | 12072 void |
9542
f8b7a65a94bc
(x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents:
9537
diff
changeset
|
12073 x_wm_set_icon_pixmap (f, pixmap_id) |
771 | 12074 struct frame *f; |
9542
f8b7a65a94bc
(x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents:
9537
diff
changeset
|
12075 int pixmap_id; |
286 | 12076 { |
15117
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
12077 Pixmap icon_pixmap; |
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
12078 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12079 #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
|
12080 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
|
12081 #endif |
286 | 12082 |
9542
f8b7a65a94bc
(x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents:
9537
diff
changeset
|
12083 if (pixmap_id > 0) |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
12084 { |
15117
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
12085 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
|
12086 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
|
12087 } |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
12088 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
|
12089 { |
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
|
12090 /* 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
|
12091 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
|
12092 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
|
12093 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
|
12094 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
|
12095 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
|
12096 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
|
12097 #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
|
12098 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
|
12099 #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
|
12100 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
|
12101 #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
|
12102 } |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
12103 |
15117
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
12104 #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
|
12105 |
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
12106 { |
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
12107 Arg al[1]; |
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
12108 XtSetArg (al[0], XtNiconPixmap, icon_pixmap); |
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
12109 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
|
12110 } |
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
12111 |
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
12112 #else /* not USE_X_TOOLKIT */ |
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
12113 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
12114 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
|
12115 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
|
12116 |
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
12117 #endif /* not USE_X_TOOLKIT */ |
286 | 12118 } |
12119 | |
21514 | 12120 void |
771 | 12121 x_wm_set_icon_position (f, icon_x, icon_y) |
12122 struct frame *f; | |
286 | 12123 int icon_x, icon_y; |
12124 { | |
7806
ef7a60d59543
(x_wm_set_icon_position, x_wm_set_icon_pixmap):
Richard M. Stallman <rms@gnu.org>
parents:
7801
diff
changeset
|
12125 #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
|
12126 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
|
12127 #else |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
12128 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
|
12129 #endif |
286 | 12130 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
12131 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
|
12132 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
|
12133 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
|
12134 |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
12135 XSetWMHints (FRAME_X_DISPLAY (f), window, &f->output_data.x->wm_hints); |
286 | 12136 } |
12137 | |
12138 | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12139 /*********************************************************************** |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12140 Fonts |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12141 ***********************************************************************/ |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12142 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12143 /* 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
|
12144 |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12145 struct font_info * |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12146 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
|
12147 FRAME_PTR f; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12148 int font_idx; |
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 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
|
12151 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12152 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12153 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12154 /* 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
|
12155 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
|
12156 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
|
12157 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
|
12158 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
|
12159 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12160 Lisp_Object |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12161 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
|
12162 FRAME_PTR f; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12163 Lisp_Object pattern; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12164 int size; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12165 int maxnames; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12166 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12167 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
|
12168 Lisp_Object tem, second_best; |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12169 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
|
12170 int try_XLoadQueryFont = 0; |
24633
c7d905dca6ba
(x_list_fonts): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents:
24618
diff
changeset
|
12171 int count; |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12172 |
19447
34099ec680df
(x_list_fonts): Adjusted for the name change of
Kenichi Handa <handa@m17n.org>
parents:
19276
diff
changeset
|
12173 patterns = Fassoc (pattern, Valternate_fontname_alist); |
18347
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12174 if (NILP (patterns)) |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12175 patterns = Fcons (pattern, Qnil); |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12176 |
22503
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
12177 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
|
12178 /* 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
|
12179 try_XLoadQueryFont = 1; |
19062
9cc02044117d
(x_list_fonts): Request at least 10 fonts by XListFonts.
Kenichi Handa <handa@m17n.org>
parents:
19060
diff
changeset
|
12180 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12181 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
|
12182 { |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12183 int num_fonts; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12184 char **names; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12185 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12186 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
|
12187 /* 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
|
12188 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
|
12189 (((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
|
12190 */ |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12191 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
|
12192 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
|
12193 !NILP (list = Fassoc (key, tem)))) |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12194 { |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12195 list = Fcdr_safe (list); |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12196 /* 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
|
12197 goto label_cached; |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12198 } |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12199 |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12200 /* 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
|
12201 |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12202 BLOCK_INPUT; |
24618
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12203 count = x_catch_errors (dpy); |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12204 |
22503
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
12205 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
|
12206 { |
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
12207 XFontStruct *font; |
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
12208 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
|
12209 |
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
12210 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
|
12211 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
|
12212 { |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12213 /* 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
|
12214 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
|
12215 font = NULL; |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12216 x_clear_errors (dpy); |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12217 } |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12218 |
22503
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
12219 if (font |
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
12220 && 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
|
12221 { |
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
12222 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
|
12223 int len = strlen (name); |
22530
6d2e22a16952
(x_list_fonts): Keep alloca usage simple.
Karl Heuer <kwzh@gnu.org>
parents:
22522
diff
changeset
|
12224 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
|
12225 |
23095
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
12226 /* 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
|
12227 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
|
12228 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
|
12229 if (len == 0) |
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
12230 try_XLoadQueryFont = 0; |
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
12231 else |
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
12232 { |
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
12233 num_fonts = 1; |
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
12234 names = (char **) alloca (sizeof (char *)); |
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
12235 /* 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
|
12236 simple var. */ |
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
12237 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
|
12238 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
|
12239 XFree (name); |
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
12240 } |
22503
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
12241 } |
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
12242 else |
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
12243 try_XLoadQueryFont = 0; |
22943
5493321d4526
(x_list_fonts): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
22907
diff
changeset
|
12244 |
5493321d4526
(x_list_fonts): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
22907
diff
changeset
|
12245 if (font) |
5493321d4526
(x_list_fonts): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
22907
diff
changeset
|
12246 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
|
12247 } |
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
12248 |
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
12249 if (!try_XLoadQueryFont) |
24618
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12250 { |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12251 /* 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
|
12252 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
|
12253 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
|
12254 &num_fonts); |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12255 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
|
12256 { |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12257 /* 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
|
12258 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
|
12259 names = NULL; |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12260 x_clear_errors (dpy); |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12261 } |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12262 } |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12263 |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12264 x_uncatch_errors (dpy, count); |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12265 UNBLOCK_INPUT; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12266 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12267 if (names) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12268 { |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12269 int i; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12270 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12271 /* 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
|
12272 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
|
12273 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
|
12274 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12275 int width = 0; |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12276 char *p = names[i]; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12277 int average_width = -1, dashes = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12278 |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12279 /* 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
|
12280 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
|
12281 (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
|
12282 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
|
12283 ignore it. */ |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12284 while (*p) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12285 if (*p++ == '-') |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12286 { |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12287 dashes++; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12288 if (dashes == 7) /* PIXEL_SIZE field */ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12289 width = atoi (p); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12290 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
|
12291 average_width = atoi (p); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12292 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12293 if (dashes < 14 || average_width != 0) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12294 { |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12295 tem = build_string (names[i]); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12296 if (NILP (Fassoc (tem, list))) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12297 { |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12298 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
|
12299 && ((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
|
12300 (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
|
12301 >= 0)) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12302 /* 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
|
12303 width of this font. */ |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12304 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
|
12305 else |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12306 /* 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
|
12307 list = Fcons (Fcons (tem, Qnil), list); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12308 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12309 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12310 } |
22503
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
12311 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
|
12312 XFreeFontNames (names); |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12313 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12314 |
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12315 /* 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
|
12316 if (f != NULL) |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12317 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
|
12318 = Fcons (Fcons (key, list), |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12319 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
|
12320 |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12321 label_cached: |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12322 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
|
12323 |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12324 newlist = second_best = Qnil; |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12325 /* 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
|
12326 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
|
12327 { |
19060
7b362a9bf8e9
(x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents:
19027
diff
changeset
|
12328 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
|
12329 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12330 tem = XCAR (list); |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12331 |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12332 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
|
12333 continue; |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12334 if (!size) |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12335 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12336 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
|
12337 continue; |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12338 } |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12339 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12340 if (!INTEGERP (XCDR (tem))) |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12341 { |
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12342 /* 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
|
12343 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
|
12344 XFontStruct *thisinfo; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12345 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12346 BLOCK_INPUT; |
24618
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12347 count = x_catch_errors (dpy); |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12348 thisinfo = XLoadQueryFont (dpy, |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12349 XSTRING (XCAR (tem))->data); |
24618
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12350 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
|
12351 { |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12352 /* 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
|
12353 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
|
12354 thisinfo = NULL; |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12355 x_clear_errors (dpy); |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12356 } |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12357 x_uncatch_errors (dpy, count); |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12358 UNBLOCK_INPUT; |
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 if (thisinfo) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12361 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12362 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
|
12363 = (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
|
12364 ? 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
|
12365 : 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
|
12366 XFreeFont (dpy, thisinfo); |
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 else |
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12369 /* 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
|
12370 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
|
12371 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
|
12372 XCDR (tem) = make_number (0); |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12373 } |
19060
7b362a9bf8e9
(x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents:
19027
diff
changeset
|
12374 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12375 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
|
12376 if (found_size == size) |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12377 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
|
12378 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
|
12379 { |
19060
7b362a9bf8e9
(x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents:
19027
diff
changeset
|
12380 if (NILP (second_best)) |
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12381 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
|
12382 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
|
12383 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12384 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
|
12385 || 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
|
12386 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
|
12387 } |
7b362a9bf8e9
(x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents:
19027
diff
changeset
|
12388 else |
7b362a9bf8e9
(x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents:
19027
diff
changeset
|
12389 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12390 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
|
12391 && 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
|
12392 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
|
12393 } |
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12394 } |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12395 } |
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12396 if (!NILP (newlist)) |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12397 break; |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12398 else if (!NILP (second_best)) |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12399 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12400 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
|
12401 break; |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12402 } |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12403 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12404 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12405 return newlist; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12406 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12407 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12408 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12409 #if GLYPH_DEBUG |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12410 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12411 /* 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
|
12412 font table. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12413 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12414 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12415 x_check_font (f, font) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12416 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12417 XFontStruct *font; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12418 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12419 int i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12420 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
|
12421 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12422 xassert (font != NULL); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12423 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12424 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
|
12425 if (dpyinfo->font_table[i].name |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12426 && font == dpyinfo->font_table[i].font) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12427 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12428 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12429 xassert (i < dpyinfo->n_fonts); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12430 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12431 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12432 #endif /* GLYPH_DEBUG != 0 */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12433 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12434 /* 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
|
12435 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
|
12436 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
|
12437 "-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
|
12438 have font->min_bounds.width == 0. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12439 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12440 static INLINE void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12441 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
|
12442 XFontStruct *font; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12443 int *w, *h; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12444 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12445 *h = FONT_HEIGHT (font); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12446 *w = font->min_bounds.width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12447 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12448 /* 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
|
12449 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
|
12450 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
|
12451 if (*w <= 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12452 *w = font->max_bounds.width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12453 } |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12456 /* 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
|
12457 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
|
12458 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
|
12459 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
|
12460 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
|
12461 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12462 static int |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12463 x_compute_min_glyph_bounds (f) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12464 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12465 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12466 int i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12467 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
|
12468 XFontStruct *font; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12469 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
|
12470 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
|
12471 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12472 dpyinfo->smallest_font_height = 100000; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12473 dpyinfo->smallest_char_width = 100000; |
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 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
|
12476 if (dpyinfo->font_table[i].name) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12477 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12478 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
|
12479 int w, h; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12480 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12481 font = (XFontStruct *) fontp->font; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12482 xassert (font != (XFontStruct *) ~0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12483 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
|
12484 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12485 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
|
12486 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
|
12487 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12488 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12489 xassert (dpyinfo->smallest_char_width > 0 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12490 && dpyinfo->smallest_font_height > 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12491 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12492 return (dpyinfo->n_fonts == 1 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12493 || dpyinfo->smallest_char_width < old_width |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12494 || dpyinfo->smallest_font_height < old_height); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12495 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12496 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12497 |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12498 /* 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
|
12499 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
|
12500 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
|
12501 If loading is failed, return NULL. */ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12502 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12503 struct font_info * |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12504 x_load_font (f, fontname, size) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12505 struct frame *f; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12506 register char *fontname; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12507 int size; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12508 { |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12509 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
|
12510 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
|
12511 int count; |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12512 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12513 /* 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
|
12514 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
|
12515 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
|
12516 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
|
12517 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12518 if (!NILP (font_names)) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12519 { |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12520 Lisp_Object tail; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12521 int i; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12522 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12523 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
|
12524 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
|
12525 if (dpyinfo->font_table[i].name |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12526 && (!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
|
12527 XSTRING (XCAR (tail))->data) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12528 || !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
|
12529 XSTRING (XCAR (tail))->data))) |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12530 return (dpyinfo->font_table + i); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12531 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12532 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12533 /* 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
|
12534 { |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12535 char *full_name; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12536 XFontStruct *font; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12537 struct font_info *fontp; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12538 unsigned long value; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12539 int i; |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12540 |
18347
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12541 /* 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
|
12542 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
|
12543 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
|
12544 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
|
12545 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
|
12546 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
|
12547 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
|
12548 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12549 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
|
12550 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
|
12551 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
|
12552 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
|
12553 { |
d4ee4399e999
(x_list_fonts): Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24224
diff
changeset
|
12554 /* 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
|
12555 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
|
12556 font = NULL; |
d4ee4399e999
(x_list_fonts): Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24224
diff
changeset
|
12557 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
|
12558 } |
d4ee4399e999
(x_list_fonts): Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24224
diff
changeset
|
12559 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
|
12560 UNBLOCK_INPUT; |
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12561 if (!font) |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12562 return NULL; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12563 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12564 /* 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
|
12565 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
|
12566 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
|
12567 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12568 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12569 /* 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
|
12570 if (i == dpyinfo->n_fonts |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12571 && 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
|
12572 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12573 int sz; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12574 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
|
12575 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
|
12576 dpyinfo->font_table |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12577 = (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
|
12578 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12579 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12580 fontp = dpyinfo->font_table + i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12581 if (i == dpyinfo->n_fonts) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12582 ++dpyinfo->n_fonts; |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12583 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12584 /* 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
|
12585 BLOCK_INPUT; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12586 fontp->font = font; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12587 fontp->font_idx = i; |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12588 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
|
12589 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
|
12590 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12591 /* 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
|
12592 full_name = 0; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12593 if (XGetFontProperty (font, XA_FONT, &value)) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12594 { |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12595 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
|
12596 char *p = name; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12597 int dashes = 0; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12598 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12599 /* 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
|
12600 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
|
12601 so don't use it. |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12602 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
|
12603 stored in them. */ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12604 while (*p) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12605 { |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12606 if (*p == '-') |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12607 dashes++; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12608 p++; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12609 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12610 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12611 if (dashes >= 13) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12612 { |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12613 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
|
12614 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
|
12615 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12616 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12617 XFree (name); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12618 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12619 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12620 if (full_name != 0) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12621 fontp->full_name = full_name; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12622 else |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12623 fontp->full_name = fontp->name; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12624 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12625 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
|
12626 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
|
12627 { |
4001ff593a99
(x_load_font): For the height of font, if normarl ascent and
Kenichi Handa <handa@m17n.org>
parents:
24223
diff
changeset
|
12628 /* 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
|
12629 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
|
12630 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
|
12631 if (max_height > fontp->height) |
24690
585a5e69e371
(x_load_font): Fix typo (`>' -> `=').
Kenichi Handa <handa@m17n.org>
parents:
24633
diff
changeset
|
12632 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
|
12633 } |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12634 |
18347
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12635 if (NILP (font_names)) |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12636 { |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12637 /* 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
|
12638 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
|
12639 the cache for x_list_fonts. */ |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12640 Lisp_Object lispy_name = build_string (fontname); |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12641 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
|
12642 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12643 XCDR (dpyinfo->name_list_element) |
18347
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12644 = Fcons (Fcons (Fcons (lispy_name, make_number (256)), |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12645 Fcons (Fcons (lispy_full_name, |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12646 make_number (fontp->size)), |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12647 Qnil)), |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12648 XCDR (dpyinfo->name_list_element)); |
18347
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12649 if (full_name) |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12650 XCDR (dpyinfo->name_list_element) |
18347
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12651 = Fcons (Fcons (Fcons (lispy_full_name, make_number (256)), |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12652 Fcons (Fcons (lispy_full_name, |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12653 make_number (fontp->size)), |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12654 Qnil)), |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12655 XCDR (dpyinfo->name_list_element)); |
18347
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12656 } |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12657 |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12658 /* 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
|
12659 code-points (0x20..0x7F or 0x2020..0x7F7F) of each charset to |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
12660 the font code-points (0:0x20..0x7F, 1:0xA0..0xFF), or |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
12661 (0:0x2020..0x7F7F, 1:0xA0A0..0xFFFF, 3:0x20A0..0x7FFF, |
18057
07e0112aa8f5
(x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents:
18008
diff
changeset
|
12662 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
|
12663 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
|
12664 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
|
12665 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
|
12666 fontp->encoding[1] |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12667 = (font->max_byte1 == 0 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12668 /* 1-byte font */ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12669 ? (font->min_char_or_byte2 < 0x80 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12670 ? (font->max_char_or_byte2 < 0x80 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12671 ? 0 /* 0x20..0x7F */ |
18057
07e0112aa8f5
(x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents:
18008
diff
changeset
|
12672 : 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
|
12673 : 1) /* 0xA0..0xFF */ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12674 /* 2-byte font */ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12675 : (font->min_byte1 < 0x80 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12676 ? (font->max_byte1 < 0x80 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12677 ? (font->min_char_or_byte2 < 0x80 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12678 ? (font->max_char_or_byte2 < 0x80 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12679 ? 0 /* 0x2020..0x7F7F */ |
18057
07e0112aa8f5
(x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents:
18008
diff
changeset
|
12680 : 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
|
12681 : 3) /* 0x20A0..0x7FFF */ |
18057
07e0112aa8f5
(x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents:
18008
diff
changeset
|
12682 : 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
|
12683 : (font->min_char_or_byte2 < 0x80 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12684 ? (font->max_char_or_byte2 < 0x80 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12685 ? 2 /* 0xA020..0xFF7F */ |
18057
07e0112aa8f5
(x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents:
18008
diff
changeset
|
12686 : 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
|
12687 : 1))); /* 0xA0A0..0xFFFF */ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12688 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12689 fontp->baseline_offset |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12690 = (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
|
12691 ? (long) value : 0); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12692 fontp->relative_compose |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12693 = (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
|
12694 ? (long) value : 0); |
17103
7cde34a6424e
(dumpglyphs): Pay attention to characters registered in
Kenichi Handa <handa@m17n.org>
parents:
17050
diff
changeset
|
12695 fontp->default_ascent |
7cde34a6424e
(dumpglyphs): Pay attention to characters registered in
Kenichi Handa <handa@m17n.org>
parents:
17050
diff
changeset
|
12696 = (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
|
12697 ? (long) value : 0); |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12698 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12699 /* 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
|
12700 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
|
12701 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
|
12702 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
|
12703 glyph matrix reallocation necessary. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12704 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
|
12705 UNBLOCK_INPUT; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12706 return fontp; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12707 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12708 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12709 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12710 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12711 /* 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
|
12712 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
|
12713 |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12714 struct font_info * |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12715 x_query_font (f, fontname) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12716 struct frame *f; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12717 register char *fontname; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12718 { |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12719 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
|
12720 int i; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12721 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12722 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
|
12723 if (dpyinfo->font_table[i].name |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12724 && (!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
|
12725 || !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
|
12726 return (dpyinfo->font_table + i); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12727 return NULL; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12728 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12729 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12730 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12731 /* 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
|
12732 `encoder' of the structure. */ |
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
12733 |
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
12734 void |
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
12735 x_find_ccl_program (fontp) |
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
12736 struct font_info *fontp; |
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
12737 { |
25068
0d081383b5b8
(x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24991
diff
changeset
|
12738 Lisp_Object list, elt; |
21548
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
12739 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12740 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
|
12741 { |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12742 elt = XCAR (list); |
21548
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
12743 if (CONSP (elt) |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12744 && STRINGP (XCAR (elt)) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12745 && (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
|
12746 >= 0)) |
25068
0d081383b5b8
(x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24991
diff
changeset
|
12747 break; |
0d081383b5b8
(x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24991
diff
changeset
|
12748 } |
0d081383b5b8
(x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24991
diff
changeset
|
12749 if (! NILP (list)) |
0d081383b5b8
(x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24991
diff
changeset
|
12750 { |
25085
23813e3a69b8
(x_find_ccl_program): Add casting.
Kenichi Handa <handa@m17n.org>
parents:
25083
diff
changeset
|
12751 struct ccl_program *ccl |
23813e3a69b8
(x_find_ccl_program): Add casting.
Kenichi Handa <handa@m17n.org>
parents:
25083
diff
changeset
|
12752 = (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
|
12753 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12754 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
|
12755 xfree (ccl); |
0d081383b5b8
(x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24991
diff
changeset
|
12756 else |
0d081383b5b8
(x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24991
diff
changeset
|
12757 fontp->font_encoder = ccl; |
21548
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
12758 } |
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
12759 } |
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
12760 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12761 |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12762 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12763 /*********************************************************************** |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12764 Initialization |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12765 ***********************************************************************/ |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
12766 |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12767 #ifdef USE_X_TOOLKIT |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12768 static XrmOptionDescRec emacs_options[] = { |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12769 {"-geometry", ".geometry", XrmoptionSepArg, NULL}, |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12770 {"-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
|
12771 |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12772 {"-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
|
12773 XrmoptionSepArg, NULL}, |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12774 {"-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
|
12775 |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12776 {"-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
|
12777 {"-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
|
12778 {"-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
|
12779 {"-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
|
12780 {"-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
|
12781 {"-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
|
12782 {"-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
|
12783 }; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12784 #endif /* USE_X_TOOLKIT */ |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12785 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12786 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
|
12787 |
11015 | 12788 #ifdef MULTI_KBOARD |
12789 /* Test whether two display-name strings agree up to the dot that separates | |
12790 the screen number from the server number. */ | |
12791 static int | |
12792 same_x_server (name1, name2) | |
12793 char *name1, *name2; | |
12794 { | |
12795 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
|
12796 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
|
12797 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
|
12798 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
|
12799 |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12800 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
|
12801 && 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
|
12802 length_until_period++; |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12803 |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12804 /* 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
|
12805 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
|
12806 name1 += 4; |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12807 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
|
12808 name2 += 4; |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12809 /* 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
|
12810 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
|
12811 && name1[system_name_length] == ':') |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12812 name1 += system_name_length; |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12813 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
|
12814 && name2[system_name_length] == ':') |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12815 name2 += system_name_length; |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12816 /* 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
|
12817 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
|
12818 && name1[length_until_period] == ':') |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12819 name1 += length_until_period; |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12820 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
|
12821 && name2[length_until_period] == ':') |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12822 name2 += length_until_period; |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12823 |
11015 | 12824 for (; *name1 != '\0' && *name1 == *name2; name1++, name2++) |
12825 { | |
12826 if (*name1 == ':') | |
12827 seen_colon++; | |
12828 if (seen_colon && *name1 == '.') | |
12829 return 1; | |
12830 } | |
12831 return (seen_colon | |
12832 && (*name1 == '.' || *name1 == '\0') | |
12833 && (*name2 == '.' || *name2 == '\0')); | |
12834 } | |
12835 #endif | |
12836 | |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12837 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
|
12838 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
|
12839 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
|
12840 char *xrm_option; |
10e818a0248a
(x_term_init): New args xrm_option and resource_string.
Richard M. Stallman <rms@gnu.org>
parents:
7738
diff
changeset
|
12841 char *resource_name; |
286 | 12842 { |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12843 int connection; |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12844 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
|
12845 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
|
12846 XrmDatabase xrdb; |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12847 |
11997
50c7c05fc301
(x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents:
11994
diff
changeset
|
12848 BLOCK_INPUT; |
50c7c05fc301
(x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents:
11994
diff
changeset
|
12849 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12850 if (!x_initialized) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12851 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12852 x_initialize (); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12853 x_initialized = 1; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12854 } |
286 | 12855 |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12856 #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
|
12857 /* 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
|
12858 errors with X11R5: |
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
12859 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
|
12860 on protocol request 18skiloaf. |
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
12861 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
|
12862 #ifdef HAVE_X11XTR6 |
9446
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
12863 XtSetLanguageProc (NULL, NULL, NULL); |
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
12864 #endif |
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
12865 |
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12866 { |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12867 int argc = 0; |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12868 char *argv[3]; |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12869 |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12870 argv[0] = ""; |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12871 argc = 1; |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12872 if (xrm_option) |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12873 { |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12874 argv[argc++] = "-xrm"; |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12875 argv[argc++] = xrm_option; |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12876 } |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12877 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
|
12878 resource_name, EMACS_CLASS, |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12879 emacs_options, XtNumber (emacs_options), |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12880 &argc, argv); |
12530
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
12881 |
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
12882 #ifdef HAVE_X11XTR6 |
14963
6ac4f300f9b4
Include locale.h if HAVE_SETLOCALE.
Richard M. Stallman <rms@gnu.org>
parents:
14946
diff
changeset
|
12883 /* 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
|
12884 fixup_locale (); |
12530
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
12885 #endif |
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12886 } |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12887 |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12888 #else /* not USE_X_TOOLKIT */ |
9446
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
12889 #ifdef HAVE_X11R5 |
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
12890 XSetLocaleModifiers (""); |
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
12891 #endif |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12892 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
|
12893 #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
|
12894 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12895 /* Detect failure. */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12896 if (dpy == 0) |
11997
50c7c05fc301
(x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents:
11994
diff
changeset
|
12897 { |
50c7c05fc301
(x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents:
11994
diff
changeset
|
12898 UNBLOCK_INPUT; |
50c7c05fc301
(x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents:
11994
diff
changeset
|
12899 return 0; |
50c7c05fc301
(x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents:
11994
diff
changeset
|
12900 } |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12901 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12902 /* 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
|
12903 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12904 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
|
12905 |
11015 | 12906 #ifdef MULTI_KBOARD |
12907 { | |
12908 struct x_display_info *share; | |
12909 Lisp_Object tail; | |
12910 | |
12911 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
|
12912 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
|
12913 if (same_x_server (XSTRING (XCAR (XCAR (tail)))->data, |
11015 | 12914 XSTRING (display_name)->data)) |
12915 break; | |
12916 if (share) | |
12917 dpyinfo->kboard = share->kboard; | |
12918 else | |
12919 { | |
12920 dpyinfo->kboard = (KBOARD *) xmalloc (sizeof (KBOARD)); | |
12921 init_kboard (dpyinfo->kboard); | |
11807
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
12922 if (!EQ (XSYMBOL (Qvendor_specific_keysyms)->function, Qunbound)) |
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
12923 { |
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
12924 char *vendor = ServerVendor (dpy); |
28307
1d4a11a5f39d
(x_term_init): Unblock input around call1.
Gerd Moellmann <gerd@gnu.org>
parents:
28281
diff
changeset
|
12925 UNBLOCK_INPUT; |
11807
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
12926 dpyinfo->kboard->Vsystem_key_alist |
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
12927 = call1 (Qvendor_specific_keysyms, |
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
12928 build_string (vendor ? vendor : "")); |
28307
1d4a11a5f39d
(x_term_init): Unblock input around call1.
Gerd Moellmann <gerd@gnu.org>
parents:
28281
diff
changeset
|
12929 BLOCK_INPUT; |
11807
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
12930 } |
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
12931 |
11015 | 12932 dpyinfo->kboard->next_kboard = all_kboards; |
12933 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
|
12934 /* 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
|
12935 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
|
12936 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
|
12937 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
|
12938 current_kboard = dpyinfo->kboard; |
11015 | 12939 } |
12940 dpyinfo->kboard->reference_count++; | |
12941 } | |
10652
f6a41cb94a75
[MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents:
10634
diff
changeset
|
12942 #endif |
f6a41cb94a75
[MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents:
10634
diff
changeset
|
12943 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12944 /* 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
|
12945 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
|
12946 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
|
12947 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12948 /* 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
|
12949 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
|
12950 x_display_name_list); |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12951 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
|
12952 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12953 dpyinfo->display = dpy; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12954 |
286 | 12955 #if 0 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12956 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
|
12957 #endif /* ! 0 */ |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12958 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12959 dpyinfo->x_id_name |
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21017
diff
changeset
|
12960 = (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
|
12961 + 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
|
12962 + 2); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12963 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
|
12964 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
|
12965 |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
12966 /* 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
|
12967 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
|
12968 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
12969 /* 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
|
12970 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
|
12971 = 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
|
12972 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12973 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
|
12974 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
|
12975 #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
|
12976 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
|
12977 #else |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12978 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
|
12979 #endif |
11162
95b70c82ec51
(x_term_init): Initialize cut_buffers_initialized.
Karl Heuer <kwzh@gnu.org>
parents:
11122
diff
changeset
|
12980 /* 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
|
12981 all versions. */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12982 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
|
12983 |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12984 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
|
12985 DefaultScreen (dpyinfo->display)); |
27991
cf10555b8ce0
(x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents:
27985
diff
changeset
|
12986 select_visual (dpyinfo); |
27985
4ba445af210b
(x_term_init): Set Colormap member of x_display_info
Gerd Moellmann <gerd@gnu.org>
parents:
27974
diff
changeset
|
12987 dpyinfo->cmap = DefaultColormapOfScreen (dpyinfo->screen); |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12988 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
|
12989 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
|
12990 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
|
12991 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
|
12992 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
|
12993 dpyinfo->icon_bitmap_id = -1; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12994 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
|
12995 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
|
12996 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
|
12997 dpyinfo->bitmaps = 0; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12998 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
|
12999 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
|
13000 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
|
13001 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
|
13002 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
|
13003 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
|
13004 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
|
13005 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
|
13006 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
|
13007 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
|
13008 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
|
13009 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
|
13010 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
|
13011 dpyinfo->x_highlight_frame = 0; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13012 dpyinfo->image_cache = make_image_cache (); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13013 |
27985
4ba445af210b
(x_term_init): Set Colormap member of x_display_info
Gerd Moellmann <gerd@gnu.org>
parents:
27974
diff
changeset
|
13014 /* See if a private colormap is requested. */ |
27991
cf10555b8ce0
(x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents:
27985
diff
changeset
|
13015 if (dpyinfo->visual == DefaultVisualOfScreen (dpyinfo->screen)) |
cf10555b8ce0
(x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents:
27985
diff
changeset
|
13016 { |
cf10555b8ce0
(x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents:
27985
diff
changeset
|
13017 if (dpyinfo->visual->class == PseudoColor) |
cf10555b8ce0
(x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents:
27985
diff
changeset
|
13018 { |
cf10555b8ce0
(x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents:
27985
diff
changeset
|
13019 Lisp_Object value; |
cf10555b8ce0
(x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents:
27985
diff
changeset
|
13020 value = display_x_get_resource (dpyinfo, |
cf10555b8ce0
(x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents:
27985
diff
changeset
|
13021 build_string ("privateColormap"), |
cf10555b8ce0
(x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents:
27985
diff
changeset
|
13022 build_string ("PrivateColormap"), |
cf10555b8ce0
(x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents:
27985
diff
changeset
|
13023 Qnil, Qnil); |
cf10555b8ce0
(x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents:
27985
diff
changeset
|
13024 if (STRINGP (value) |
cf10555b8ce0
(x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents:
27985
diff
changeset
|
13025 && (!strcmp (XSTRING (value)->data, "true") |
cf10555b8ce0
(x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents:
27985
diff
changeset
|
13026 || !strcmp (XSTRING (value)->data, "on"))) |
cf10555b8ce0
(x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents:
27985
diff
changeset
|
13027 dpyinfo->cmap = XCopyColormapAndFree (dpyinfo->display, dpyinfo->cmap); |
cf10555b8ce0
(x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents:
27985
diff
changeset
|
13028 } |
cf10555b8ce0
(x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents:
27985
diff
changeset
|
13029 } |
cf10555b8ce0
(x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents:
27985
diff
changeset
|
13030 else |
cf10555b8ce0
(x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents:
27985
diff
changeset
|
13031 dpyinfo->cmap = XCreateColormap (dpyinfo->display, dpyinfo->root_window, |
cf10555b8ce0
(x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents:
27985
diff
changeset
|
13032 dpyinfo->visual, AllocNone); |
27985
4ba445af210b
(x_term_init): Set Colormap member of x_display_info
Gerd Moellmann <gerd@gnu.org>
parents:
27974
diff
changeset
|
13033 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13034 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13035 int screen_number = XScreenNumberOfScreen (dpyinfo->screen); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13036 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
|
13037 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
|
13038 dpyinfo->resy = pixels * 25.4 / mm; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13039 pixels = DisplayWidth (dpyinfo->display, screen_number); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13040 mm = DisplayWidthMM (dpyinfo->display, screen_number); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13041 dpyinfo->resx = pixels * 25.4 / mm; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13042 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13043 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
13044 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
|
13045 = 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
|
13046 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
|
13047 = 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
|
13048 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
|
13049 = 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
|
13050 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
|
13051 = 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
|
13052 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
|
13053 = 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
|
13054 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
|
13055 = 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
|
13056 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
|
13057 = 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
|
13058 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
|
13059 = 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
|
13060 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
|
13061 = 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
|
13062 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
|
13063 = 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
|
13064 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
|
13065 = XInternAtom (dpyinfo->display, "TEXT", False); |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13066 dpyinfo->Xatom_COMPOUND_TEXT |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13067 = 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
|
13068 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
|
13069 = 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
|
13070 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
|
13071 = 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
|
13072 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
|
13073 = 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
|
13074 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
|
13075 = 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
|
13076 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
|
13077 = 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
|
13078 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
|
13079 = 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
|
13080 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
|
13081 = 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
|
13082 /* For properties of font. */ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13083 dpyinfo->Xatom_PIXEL_SIZE |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13084 = XInternAtom (dpyinfo->display, "PIXEL_SIZE", False); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13085 dpyinfo->Xatom_MULE_BASELINE_OFFSET |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13086 = 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
|
13087 dpyinfo->Xatom_MULE_RELATIVE_COMPOSE |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13088 = 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
|
13089 dpyinfo->Xatom_MULE_DEFAULT_ASCENT |
7cde34a6424e
(dumpglyphs): Pay attention to characters registered in
Kenichi Handa <handa@m17n.org>
parents:
17050
diff
changeset
|
13090 = 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
|
13091 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13092 /* Ghostscript support. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13093 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
|
13094 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
|
13095 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13096 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
|
13097 False); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13098 |
11162
95b70c82ec51
(x_term_init): Initialize cut_buffers_initialized.
Karl Heuer <kwzh@gnu.org>
parents:
11122
diff
changeset
|
13099 dpyinfo->cut_buffers_initialized = 0; |
95b70c82ec51
(x_term_init): Initialize cut_buffers_initialized.
Karl Heuer <kwzh@gnu.org>
parents:
11122
diff
changeset
|
13100 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
13101 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
|
13102 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
|
13103 |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13104 { |
18705
c4f2eab8e736
(x_term_init): Don't use initializer for null_bits.
Richard M. Stallman <rms@gnu.org>
parents:
18646
diff
changeset
|
13105 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
|
13106 |
c4f2eab8e736
(x_term_init): Don't use initializer for null_bits.
Richard M. Stallman <rms@gnu.org>
parents:
18646
diff
changeset
|
13107 null_bits[0] = 0x00; |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13108 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13109 dpyinfo->null_pixel |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13110 = XCreatePixmapFromBitmapData (dpyinfo->display, dpyinfo->root_window, |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13111 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
|
13112 1); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13113 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13114 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13115 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13116 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
|
13117 extern unsigned char *gray_bitmap_bits; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13118 dpyinfo->gray |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13119 = XCreatePixmapFromBitmapData (dpyinfo->display, dpyinfo->root_window, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13120 gray_bitmap_bits, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13121 gray_bitmap_width, gray_bitmap_height, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13122 (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
|
13123 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13124 |
27500
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
13125 #ifdef HAVE_X_I18N |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
13126 xim_initialize (dpyinfo, resource_name); |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
13127 #endif |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
13128 |
9572 | 13129 #ifdef subprocesses |
13130 /* 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
|
13131 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
|
13132 add_keyboard_wait_descriptor (connection); |
9572 | 13133 #endif |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
13134 |
4147
c6657758fb6f
* xterm.c (x_term_init): Adjust message printed when we can't
Jim Blandy <jimb@redhat.com>
parents:
3951
diff
changeset
|
13135 #ifndef F_SETOWN_BUG |
286 | 13136 #ifdef F_SETOWN |
13137 #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
|
13138 /* 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
|
13139 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
|
13140 #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
|
13141 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
|
13142 #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
|
13143 #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
|
13144 #endif /* F_SETOWN_BUG */ |
286 | 13145 |
13146 #ifdef SIGIO | |
11994
b4dd8ca308dd
(x_term_init): Call init_sigio only if interrupt_input.
Karl Heuer <kwzh@gnu.org>
parents:
11988
diff
changeset
|
13147 if (interrupt_input) |
b4dd8ca308dd
(x_term_init): Call init_sigio only if interrupt_input.
Karl Heuer <kwzh@gnu.org>
parents:
11988
diff
changeset
|
13148 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
|
13149 #endif /* ! defined (SIGIO) */ |
286 | 13150 |
15904
a31cfab57f69
(x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents:
15808
diff
changeset
|
13151 #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
|
13152 #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
|
13153 /* 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
|
13154 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
|
13155 { |
a31cfab57f69
(x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents:
15808
diff
changeset
|
13156 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
|
13157 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
|
13158 Font font; |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
13159 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
|
13160 |
a31cfab57f69
(x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents:
15808
diff
changeset
|
13161 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
|
13162 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
|
13163 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
|
13164 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
|
13165 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
|
13166 to.addr = (XPointer)&font; |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
13167 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
|
13168 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
|
13169 abort (); |
a31cfab57f69
(x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents:
15808
diff
changeset
|
13170 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
|
13171 XrmPutLineResource (&xrdb, "Emacs.dialog.*.font: 9x15"); |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
13172 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
|
13173 } |
a31cfab57f69
(x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents:
15808
diff
changeset
|
13174 #endif |
19021
6f150e46a5fd
(x_term_init) [! HAVE_X11R5]: Don't try to use XtCvtStringToFont.
Richard M. Stallman <rms@gnu.org>
parents:
18996
diff
changeset
|
13175 #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
|
13176 |
28139 | 13177 /* See if we should run in synchronous mode. This is useful |
13178 for debugging X code. */ | |
13179 { | |
13180 Lisp_Object value; | |
13181 value = display_x_get_resource (dpyinfo, | |
13182 build_string ("synchronous"), | |
13183 build_string ("Synchronous"), | |
13184 Qnil, Qnil); | |
13185 if (STRINGP (value) | |
13186 && (!strcmp (XSTRING (value)->data, "true") | |
13187 || !strcmp (XSTRING (value)->data, "on"))) | |
13188 XSynchronize (dpyinfo->display, True); | |
13189 } | |
13190 | |
11997
50c7c05fc301
(x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents:
11994
diff
changeset
|
13191 UNBLOCK_INPUT; |
50c7c05fc301
(x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents:
11994
diff
changeset
|
13192 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13193 return dpyinfo; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13194 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13195 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13196 /* 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
|
13197 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
|
13198 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13199 void |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13200 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
|
13201 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
|
13202 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13203 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
|
13204 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13205 /* 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
|
13206 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
|
13207 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
|
13208 && 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
|
13209 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
|
13210 else |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13211 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13212 Lisp_Object tail; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13213 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13214 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
|
13215 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
|
13216 { |
27428
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
13217 if (EQ (XCAR (XCDR (tail)), dpyinfo->name_list_element)) |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13218 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
13219 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
|
13220 break; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13221 } |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
13222 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
|
13223 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13224 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13225 |
27524
67501e6e8b34
(x_delete_display): Update next_noop_dpyinfo to ensure
Gerd Moellmann <gerd@gnu.org>
parents:
27500
diff
changeset
|
13226 if (next_noop_dpyinfo == dpyinfo) |
67501e6e8b34
(x_delete_display): Update next_noop_dpyinfo to ensure
Gerd Moellmann <gerd@gnu.org>
parents:
27500
diff
changeset
|
13227 next_noop_dpyinfo = dpyinfo->next; |
67501e6e8b34
(x_delete_display): Update next_noop_dpyinfo to ensure
Gerd Moellmann <gerd@gnu.org>
parents:
27500
diff
changeset
|
13228 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13229 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
|
13230 x_display_list = dpyinfo->next; |
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13231 else |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13232 { |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13233 struct x_display_info *tail; |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13234 |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13235 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
|
13236 if (tail->next == dpyinfo) |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13237 tail->next = tail->next->next; |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13238 } |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13239 |
12771
6f07c79d9a05
(x_delete_display) [AIX]: Don't call XRmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
12750
diff
changeset
|
13240 #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
|
13241 #ifndef AIX /* On AIX, XCloseDisplay calls this. */ |
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13242 XrmDestroyDatabase (dpyinfo->xrdb); |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13243 #endif |
12771
6f07c79d9a05
(x_delete_display) [AIX]: Don't call XRmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
12750
diff
changeset
|
13244 #endif |
11015 | 13245 #ifdef MULTI_KBOARD |
13246 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
|
13247 delete_kboard (dpyinfo->kboard); |
10652
f6a41cb94a75
[MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents:
10634
diff
changeset
|
13248 #endif |
27500
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
13249 #ifdef HAVE_X_I18N |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
13250 if (dpyinfo->xim) |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
13251 xim_close_dpy (dpyinfo); |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
13252 #endif |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
13253 |
10652
f6a41cb94a75
[MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents:
10634
diff
changeset
|
13254 xfree (dpyinfo->font_table); |
f6a41cb94a75
[MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents:
10634
diff
changeset
|
13255 xfree (dpyinfo->x_id_name); |
f6a41cb94a75
[MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents:
10634
diff
changeset
|
13256 xfree (dpyinfo); |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13257 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13258 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13259 /* 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
|
13260 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13261 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
|
13262 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13263 x_produce_glyphs, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13264 x_write_glyphs, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13265 x_insert_glyphs, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13266 x_clear_end_of_line, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13267 x_scroll_run, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13268 x_after_update_window_line, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13269 x_update_window_begin, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13270 x_update_window_end, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13271 XTcursor_to, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13272 x_flush, |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
13273 x_get_glyph_overhangs, |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
13274 x_fix_overlapping_area |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13275 }; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13276 |
21514 | 13277 void |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13278 x_initialize () |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13279 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13280 rif = &x_redisplay_interface; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13281 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13282 clear_frame_hook = x_clear_frame; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13283 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
|
13284 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
|
13285 delete_glyphs_hook = x_delete_glyphs; |
286 | 13286 ring_bell_hook = XTring_bell; |
13287 reset_terminal_modes_hook = XTreset_terminal_modes; | |
13288 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
|
13289 update_begin_hook = x_update_begin; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13290 update_end_hook = x_update_end; |
286 | 13291 set_terminal_window_hook = XTset_terminal_window; |
13292 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
|
13293 frame_up_to_date_hook = XTframe_up_to_date; |
286 | 13294 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
|
13295 mouse_position_hook = XTmouse_position; |
771 | 13296 frame_rehighlight_hook = XTframe_rehighlight; |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
13297 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
|
13298 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
|
13299 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
|
13300 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
|
13301 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
|
13302 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
|
13303 |
771 | 13304 scroll_region_ok = 1; /* we'll scroll partial frames */ |
286 | 13305 char_ins_del_ok = 0; /* just as fast to write the line */ |
13306 line_ins_del_ok = 1; /* we'll just blt 'em */ | |
13307 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
|
13308 memory_below_frame = 0; /* we don't remember what scrolls |
286 | 13309 off the bottom */ |
13310 baud_rate = 19200; | |
13311 | |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13312 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
|
13313 last_tool_bar_item = -1; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13314 any_help_event_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13315 |
4476
e7de1b007447
(x_term_init): Set the hooks before we call Fset_input_mode.
Richard M. Stallman <rms@gnu.org>
parents:
4304
diff
changeset
|
13316 /* 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
|
13317 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
|
13318 |
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13319 #ifdef USE_X_TOOLKIT |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13320 XtToolkitInitialize (); |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13321 Xt_app_con = XtCreateApplicationContext (); |
12494
bfbe2490dbf0
(x_initialize) [USE_X_TOOLKIT]: Set fallback resources.
Richard M. Stallman <rms@gnu.org>
parents:
12431
diff
changeset
|
13322 XtAppSetFallbackResources (Xt_app_con, Xt_default_resources); |
27428
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
13323 |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
13324 /* Install an asynchronous timer that processes Xt timeout events |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
13325 every 0.1s. This is necessary because some widget sets use |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
13326 timeouts internally, for example the LessTif menu bar, or the |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
13327 Xaw3d scroll bar. When Xt timouts aren't processed, these |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
13328 widgets don't behave normally. */ |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
13329 { |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
13330 EMACS_TIME interval; |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
13331 EMACS_SET_SECS_USECS (interval, 0, 100000); |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
13332 start_atimer (ATIMER_CONTINUOUS, interval, x_process_timeouts, 0); |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
13333 } |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
13334 #endif |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
13335 |
26800
e828d4307ab9
(x_initialize): only setup xaw3d_* if they've been declared.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26789
diff
changeset
|
13336 #if USE_TOOLKIT_SCROLL_BARS |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
13337 xaw3d_arrow_scroll = False; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
13338 xaw3d_pick_top = True; |
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13339 #endif |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13340 |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
13341 /* 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
|
13342 original error handler. */ |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
13343 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
|
13344 XSetIOErrorHandler (x_io_error_quitter); |
286 | 13345 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13346 /* Disable Window Change signals; they are handled by X events. */ |
286 | 13347 #ifdef SIGWINCH |
13348 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
|
13349 #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
|
13350 |
10743
6977bff3ff38
(x_display_bar_cursor): Use frame's cursor_width.
Richard M. Stallman <rms@gnu.org>
parents:
10652
diff
changeset
|
13351 signal (SIGPIPE, x_connection_signal); |
286 | 13352 } |
395 | 13353 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13354 |
395 | 13355 void |
13356 syms_of_xterm () | |
13357 { | |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
13358 staticpro (&x_error_message_string); |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
13359 x_error_message_string = Qnil; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
13360 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13361 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
|
13362 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
|
13363 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
13364 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
|
13365 last_mouse_scroll_bar = Qnil; |
11807
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
13366 |
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
13367 staticpro (&Qvendor_specific_keysyms); |
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
13368 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
|
13369 |
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
13370 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
|
13371 last_mouse_press_frame = Qnil; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13372 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13373 staticpro (&help_echo); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13374 help_echo = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13375 staticpro (&previous_help_echo); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13376 previous_help_echo = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13377 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13378 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
|
13379 "*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
|
13380 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
|
13381 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
|
13382 x_stretch_cursor_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13383 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13384 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
|
13385 "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
|
13386 #if USE_TOOLKIT_SCROLL_BARS |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13387 x_toolkit_scroll_bars_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13388 #else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13389 x_toolkit_scroll_bars_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13390 #endif |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13391 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13392 staticpro (&last_mouse_motion_frame); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13393 last_mouse_motion_frame = Qnil; |
395 | 13394 } |
14694
41de9b2640a1
(X_CONNECTION_LOCK_FLAG): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
14692
diff
changeset
|
13395 |
41de9b2640a1
(X_CONNECTION_LOCK_FLAG): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
14692
diff
changeset
|
13396 #endif /* not HAVE_X_WINDOWS */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13397 |