Mercurial > emacs
annotate src/xterm.c @ 32413:f5b3d7a43d24
(fancy-splash-text): Remove superfluous quote.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Thu, 12 Oct 2000 11:07:55 +0000 |
parents | be53a078f4e2 |
children | 545db232e60c |
rev | line source |
---|---|
286 | 1 /* X Communication module for terminals which understand the X protocol. |
28629
437e522505fb
(x_produce_glyphs) <ASCII chars>: Take into account
Gerd Moellmann <gerd@gnu.org>
parents:
28443
diff
changeset
|
2 Copyright (C) 1989, 93, 94, 95, 96, 1997, 1998, 1999, 2000 |
24991
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 |
47 /* Load sys/types.h if not already loaded. | |
48 In some systems loading it twice is suicidal. */ | |
49 #ifndef makedev | |
50 #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
|
51 #endif /* makedev */ |
286 | 52 |
16220
02044b05d8e0
Replaced symbol BSD with BSD_SYSTEM.
Karl Heuer <kwzh@gnu.org>
parents:
16209
diff
changeset
|
53 #ifdef BSD_SYSTEM |
286 | 54 #include <sys/ioctl.h> |
16220
02044b05d8e0
Replaced symbol BSD with BSD_SYSTEM.
Karl Heuer <kwzh@gnu.org>
parents:
16209
diff
changeset
|
55 #endif /* ! defined (BSD_SYSTEM) */ |
286 | 56 |
3355
e0c2e8a2ef75
(XTread_socket, case KeyPress) [HPUX]: Test IsModifiedKey.
Richard M. Stallman <rms@gnu.org>
parents:
3284
diff
changeset
|
57 #include "systty.h" |
555 | 58 #include "systime.h" |
286 | 59 |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
60 #ifndef INCLUDED_FCNTL |
286 | 61 #include <fcntl.h> |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
62 #endif |
286 | 63 #include <ctype.h> |
64 #include <errno.h> | |
65 #include <setjmp.h> | |
66 #include <sys/stat.h> | |
10366 | 67 /* Caused redefinition of DBL_DIG on Netbsd; seems not to be needed. */ |
68 /* #include <sys/param.h> */ | |
286 | 69 |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
70 #include "charset.h" |
30748 | 71 #include "coding.h" |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
72 #include "ccl.h" |
23515
1e52542fb338
Include frame.h before fontset.h.
Kenichi Handa <handa@m17n.org>
parents:
23162
diff
changeset
|
73 #include "frame.h" |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
74 #include "dispextern.h" |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
75 #include "fontset.h" |
286 | 76 #include "termhooks.h" |
77 #include "termopts.h" | |
78 #include "termchar.h" | |
79 #if 0 | |
80 #include "sink.h" | |
81 #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
|
82 #endif /* ! 0 */ |
286 | 83 #include "gnu.h" |
84 #include "disptab.h" | |
85 #include "buffer.h" | |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
86 #include "window.h" |
8652 | 87 #include "keyboard.h" |
8848 | 88 #include "intervals.h" |
21514 | 89 #include "process.h" |
27428
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
90 #include "atimer.h" |
286 | 91 |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
92 #ifdef USE_X_TOOLKIT |
15117
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
93 #include <X11/Shell.h> |
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
94 #endif |
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
95 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
96 #ifdef HAVE_SYS_TIME_H |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
97 #include <sys/time.h> |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
98 #endif |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
99 #ifdef HAVE_UNISTD_H |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
100 #include <unistd.h> |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
101 #endif |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
102 |
15117
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
103 #ifdef USE_X_TOOLKIT |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
104 |
30321 | 105 extern void free_frame_menubar P_ ((struct frame *)); |
106 extern struct frame *x_menubar_window_to_frame P_ ((struct x_display_info *, | |
107 int)); | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
108 |
13507
9a9f459075af
(HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents:
13363
diff
changeset
|
109 #if (XtSpecificationRelease >= 5) && !defined(NO_EDITRES) |
9a9f459075af
(HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents:
13363
diff
changeset
|
110 #define HACK_EDITRES |
6941
a914781ef58a
(Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents:
6934
diff
changeset
|
111 extern void _XEditResCheckMessages (); |
13507
9a9f459075af
(HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents:
13363
diff
changeset
|
112 #endif /* not NO_EDITRES */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
113 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
114 /* Include toolkit specific headers for the scroll bar widget. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
115 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
116 #ifdef USE_TOOLKIT_SCROLL_BARS |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
117 #if defined USE_MOTIF |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
118 #include <Xm/Xm.h> /* for LESSTIF_VERSION */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
119 #include <Xm/ScrollBar.h> |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
120 #include <Xm/ScrollBarP.h> |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
121 #else /* !USE_MOTIF i.e. use Xaw */ |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
122 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
123 #ifdef HAVE_XAW3D |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
124 #include <X11/Xaw3d/Simple.h> |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
125 #include <X11/Xaw3d/Scrollbar.h> |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
126 #define ARROW_SCROLLBAR |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
127 #include <X11/Xaw3d/ScrollbarP.h> |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
128 #else /* !HAVE_XAW3D */ |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
129 #include <X11/Xaw/Simple.h> |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
130 #include <X11/Xaw/Scrollbar.h> |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
131 #endif /* !HAVE_XAW3D */ |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
132 #ifndef XtNpickTop |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
133 #define XtNpickTop "pickTop" |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
134 #endif /* !XtNpickTop */ |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
135 #endif /* !USE_MOTIF */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
136 #endif /* USE_TOOLKIT_SCROLL_BARS */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
137 |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
138 #endif /* USE_X_TOOLKIT */ |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
139 |
6022
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
140 #ifndef USE_X_TOOLKIT |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
141 #define x_any_window_to_frame x_window_to_frame |
6983
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
142 #define x_top_window_to_frame x_window_to_frame |
6022
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
143 #endif |
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
144 |
7602
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
145 #ifdef USE_X_TOOLKIT |
12189 | 146 #include "widget.h" |
7602
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
147 #ifndef XtNinitialState |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
148 #define XtNinitialState "initialState" |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
149 #endif |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
150 #endif |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
151 |
14522
9cee3e7c6468
(min, max): Don't define if already defined.
Richard M. Stallman <rms@gnu.org>
parents:
14489
diff
changeset
|
152 #ifndef min |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
153 #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
|
154 #endif |
9cee3e7c6468
(min, max): Don't define if already defined.
Richard M. Stallman <rms@gnu.org>
parents:
14489
diff
changeset
|
155 #ifndef max |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
156 #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
|
157 #endif |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
158 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
159 #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
|
160 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
161 #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
|
162 |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
163 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
164 /* Bitmaps for truncated lines. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
165 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
166 enum bitmap_type |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
167 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
168 NO_BITMAP, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
169 LEFT_TRUNCATION_BITMAP, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
170 RIGHT_TRUNCATION_BITMAP, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
171 OVERLAY_ARROW_BITMAP, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
172 CONTINUED_LINE_BITMAP, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
173 CONTINUATION_LINE_BITMAP, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
174 ZV_LINE_BITMAP |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
177 /* 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
|
178 `indicate-empty-lines' is non-nil. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
179 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
180 #define zv_width 8 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
181 #define zv_height 8 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
182 static unsigned char zv_bits[] = { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
183 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
|
184 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
185 /* An arrow like this: `<-'. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
186 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
187 #define left_width 8 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
188 #define left_height 8 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
189 static unsigned char left_bits[] = { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
190 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
|
191 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
192 /* Right truncation arrow bitmap `->'. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
193 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
194 #define right_width 8 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
195 #define right_height 8 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
196 static unsigned char right_bits[] = { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
197 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
|
198 |
25465 | 199 /* Marker for continued lines. */ |
200 | |
201 #define continued_width 8 | |
202 #define continued_height 8 | |
203 static unsigned char continued_bits[] = { | |
204 0x3c, 0x7c, 0xc0, 0xe4, 0xfc, 0x7c, 0x3c, 0x7c}; | |
205 | |
206 /* Marker for continuation lines. */ | |
207 | |
208 #define continuation_width 8 | |
209 #define continuation_height 8 | |
210 static unsigned char continuation_bits[] = { | |
211 0x3c, 0x3e, 0x03, 0x27, 0x3f, 0x3e, 0x3c, 0x3e}; | |
212 | |
213 /* Overlay arrow bitmap. */ | |
214 | |
215 #if 0 | |
216 /* A bomb. */ | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
217 #define ov_width 8 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
218 #define ov_height 8 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
219 static unsigned char ov_bits[] = { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
220 0x30, 0x08, 0x3c, 0x7e, 0x7a, 0x7a, 0x62, 0x3c}; |
25465 | 221 #else |
222 /* A triangular arrow. */ | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
223 #define ov_width 8 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
224 #define ov_height 8 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
225 static unsigned char ov_bits[] = { |
25465 | 226 0x03, 0x0f, 0x1f, 0x3f, 0x3f, 0x1f, 0x0f, 0x03}; |
227 | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
228 #endif |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
229 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
230 extern Lisp_Object Qhelp_echo; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
231 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
232 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
233 /* 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
|
234 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
235 int x_toolkit_scroll_bars_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
236 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
237 /* 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
|
238 (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
|
239 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
240 static Lisp_Object help_echo; |
30302
9a5ccf8784f3
(help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
30214
diff
changeset
|
241 static Lisp_Object help_echo_window; |
30214
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
242 static Lisp_Object help_echo_object; |
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
243 static int help_echo_pos; |
24991
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 /* Temporary variable for XTread_socket. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
246 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
247 static Lisp_Object previous_help_echo; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
248 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
249 /* 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
|
250 start. */ |
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 int any_help_event_p; |
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 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
|
255 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
|
256 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
|
257 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
258 int x_stretch_cursor_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
259 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
260 /* 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
|
261 use. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
262 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
263 struct x_display_info *x_display_list; |
286 | 264 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
265 /* 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
|
266 . 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
|
267 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
|
268 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
|
269 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
270 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
|
271 |
2474
86c8a6e08fd4
Fix typo in comment delimiter.
Richard M. Stallman <rms@gnu.org>
parents:
2468
diff
changeset
|
272 /* 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
|
273 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
|
274 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
|
275 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
|
276 |
2468
35aa32e1a003
* xterm.c (updating_frame): Declare this extern instead of static,
Jim Blandy <jimb@redhat.com>
parents:
2439
diff
changeset
|
277 extern struct frame *updating_frame; |
771 | 278 |
21514 | 279 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
|
280 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
281 /* 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
|
282 |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
283 struct frame *pending_autoraise_frame; |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
284 |
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
285 #ifdef USE_X_TOOLKIT |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
286 /* The application context for Xt use. */ |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
287 XtAppContext Xt_app_con; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
288 static String Xt_default_resources[] = {0}; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
289 #endif /* USE_X_TOOLKIT */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
290 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
291 /* 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
|
292 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
|
293 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
|
294 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
295 struct cursor_pos output_cursor; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
296 |
27428
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
297 /* 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
|
298 |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
299 static int toolkit_scroll_bar_interaction; |
286 | 300 |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
301 /* Mouse movement. |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
302 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
303 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
|
304 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
|
305 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
|
306 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
|
307 |
c99dd01d9334
(note_mouse_movement): Don't call XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
14963
diff
changeset
|
308 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
|
309 |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
310 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
|
311 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
|
312 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
|
313 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
|
314 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
|
315 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
|
316 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
|
317 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
|
318 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
|
319 is off. */ |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
320 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
321 /* 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
|
322 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
323 FRAME_PTR last_mouse_frame; |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
324 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
|
325 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
|
326 |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
327 /* 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
|
328 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
329 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
|
330 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
|
331 an ordinary motion. |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
332 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
333 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
|
334 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
|
335 event. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
336 |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
337 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
|
338 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
339 /* 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
|
340 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
|
341 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
|
342 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
|
343 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
|
344 it's somewhat accurate. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
345 |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
346 static Time last_mouse_movement_time; |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
347 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
348 /* 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
|
349 events. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
350 |
9337
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
351 #ifdef __STDC__ |
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
352 static int volatile input_signal_count; |
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
353 #else |
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
354 static int input_signal_count; |
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
355 #endif |
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
356 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
357 /* Used locally within XTread_socket. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
358 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
359 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
|
360 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
361 /* 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
|
362 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
363 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
|
364 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
|
365 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
366 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
|
367 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
368 /* Tells if a window manager is present or not. */ |
286 | 369 |
370 extern Lisp_Object Vx_no_window_manager; | |
371 | |
6941
a914781ef58a
(Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents:
6934
diff
changeset
|
372 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
|
373 |
286 | 374 extern int errno; |
375 | |
2661
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
376 /* 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
|
377 |
1841
338e4ffdb54b
(XTread_socket): Support extra_keyboard_modifiers.
Richard M. Stallman <rms@gnu.org>
parents:
1821
diff
changeset
|
378 extern int extra_keyboard_modifiers; |
338e4ffdb54b
(XTread_socket): Support extra_keyboard_modifiers.
Richard M. Stallman <rms@gnu.org>
parents:
1821
diff
changeset
|
379 |
11807
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
380 static Lisp_Object Qvendor_specific_keysyms; |
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
381 |
30321 | 382 extern XrmDatabase x_load_resources P_ ((Display *, char *, char *, char *)); |
383 extern Lisp_Object x_icon_type P_ ((struct frame *)); | |
11915
e2ab839155e1
(XTflash): Use pointers as args to select.
Karl Heuer <kwzh@gnu.org>
parents:
11904
diff
changeset
|
384 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
385 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
386 /* 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
|
387 glyphs in x_draw_glyphs. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
388 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
389 enum draw_glyphs_face |
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 DRAW_NORMAL_TEXT, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
392 DRAW_INVERSE_VIDEO, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
393 DRAW_CURSOR, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
394 DRAW_MOUSE_FACE, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
395 DRAW_IMAGE_RAISED, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
396 DRAW_IMAGE_SUNKEN |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
397 }; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
398 |
30160
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
399 static void x_update_window_end P_ ((struct window *, int, int)); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
400 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
|
401 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
|
402 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
|
403 unsigned)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
404 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
|
405 int *, int *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
406 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
|
407 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
|
408 int *, int *, int *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
409 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
|
410 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
|
411 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
|
412 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
|
413 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
|
414 enum draw_glyphs_face)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
415 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
|
416 int x_catch_errors P_ ((Display *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
417 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
|
418 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
|
419 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
|
420 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
|
421 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
|
422 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
|
423 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
|
424 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
|
425 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
|
426 void x_initialize P_ ((void)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
427 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
|
428 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
|
429 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
|
430 struct glyph_row *, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
431 enum draw_glyphs_face)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
432 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
|
433 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
|
434 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
|
435 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
|
436 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
|
437 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
|
438 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
|
439 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
|
440 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
|
441 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
|
442 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
|
443 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
|
444 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
|
445 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
|
446 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
|
447 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
|
448 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
|
449 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
|
450 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
|
451 XRectangle *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
452 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
|
453 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
|
454 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
|
455 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
|
456 XRectangle *, enum glyph_row_area)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
457 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
|
458 XRectangle *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
459 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
|
460 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
|
461 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
|
462 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
|
463 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
|
464 enum bitmap_type)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
465 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
466 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
|
467 GC, int)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
468 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
|
469 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
|
470 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
|
471 static void x_flush P_ ((struct frame *f)); |
30321 | 472 static void x_update_begin P_ ((struct frame *)); |
473 static void x_update_window_begin P_ ((struct window *)); | |
474 static void x_draw_vertical_border P_ ((struct window *)); | |
475 static void x_after_update_window_line P_ ((struct glyph_row *)); | |
476 static INLINE void take_vertical_position_into_account P_ ((struct it *)); | |
477 static void x_produce_stretch_glyph P_ ((struct it *)); | |
478 | |
24991
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 |
30153
1eb41ec71ea5
(x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents:
30137
diff
changeset
|
605 #if 0 /* Rows in a current matrix containing glyphs in mouse-face have |
1eb41ec71ea5
(x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents:
30137
diff
changeset
|
606 their mouse_face_p flag set, which means that they are always |
1eb41ec71ea5
(x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents:
30137
diff
changeset
|
607 unequal to rows in a desired matrix which never have that |
1eb41ec71ea5
(x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents:
30137
diff
changeset
|
608 flag set. So, rows containing mouse-face glyphs are never |
1eb41ec71ea5
(x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents:
30137
diff
changeset
|
609 scrolled, and we don't have to switch the mouse highlight off |
1eb41ec71ea5
(x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents:
30137
diff
changeset
|
610 here to prevent it from being scrolled. */ |
1eb41ec71ea5
(x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents:
30137
diff
changeset
|
611 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
612 /* 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
|
613 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
|
614 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
|
615 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
|
616 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
|
617 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
|
618 && 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
|
619 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
620 int i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
621 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
622 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
|
623 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
|
624 break; |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
625 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
626 if (i < w->desired_matrix->nrows) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
627 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
|
628 } |
30153
1eb41ec71ea5
(x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents:
30137
diff
changeset
|
629 #endif /* 0 */ |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
630 } |
8781
98741404d3e0
Delete X11 conditionals.
Richard M. Stallman <rms@gnu.org>
parents:
8724
diff
changeset
|
631 |
286 | 632 UNBLOCK_INPUT; |
633 } | |
634 | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
635 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
636 /* 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
|
637 have vertical scroll bars. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
638 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
639 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
640 x_draw_vertical_border (w) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
641 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
642 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
643 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
|
644 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
645 /* 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
|
646 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
|
647 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
|
648 neighbor will suffice as a border. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
649 if (!WINDOW_RIGHTMOST_P (w) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
650 && !FRAME_HAS_VERTICAL_SCROLL_BARS (f)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
651 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
652 int x0, x1, y0, y1; |
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 window_box_edges (w, -1, &x0, &y0, &x1, &y1); |
25465 | 655 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
|
656 y1 -= 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
657 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
658 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
|
659 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
|
660 } |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
663 |
30160
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
664 /* End update of window W (which is equal to updated_window). |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
665 |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
666 Draw vertical borders between horizontally adjacent windows, and |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
667 display W's cursor if CURSOR_ON_P is non-zero. |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
668 |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
669 MOUSE_FACE_OVERWRITTEN_P non-zero means that some row containing |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
670 glyphs in mouse-face were overwritten. In that case we have to |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
671 make sure that the mouse-highlight is properly redrawn. |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
672 |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
673 W may be a menu bar pseudo-window in case we don't have X toolkit |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
674 support. Such windows don't have a cursor, so don't display it |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
675 here. */ |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
676 |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
677 static void |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
678 x_update_window_end (w, cursor_on_p, mouse_face_overwritten_p) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
679 struct window *w; |
30160
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
680 int cursor_on_p, mouse_face_overwritten_p; |
24991
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 if (!w->pseudo_window_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
683 { |
30160
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
684 struct x_display_info *dpyinfo |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
685 = FRAME_X_DISPLAY_INFO (XFRAME (w->frame)); |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
686 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
687 BLOCK_INPUT; |
30160
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
688 |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
689 /* If a row with mouse-face was overwritten, arrange for |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
690 XTframe_up_to_date to redisplay the mouse highlight. */ |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
691 if (mouse_face_overwritten_p) |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
692 { |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
693 dpyinfo->mouse_face_beg_row = dpyinfo->mouse_face_beg_col = -1; |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
694 dpyinfo->mouse_face_end_row = dpyinfo->mouse_face_end_col = -1; |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
695 dpyinfo->mouse_face_window = Qnil; |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
696 } |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
697 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
698 if (cursor_on_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
699 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
|
700 output_cursor.vpos, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
701 output_cursor.x, output_cursor.y); |
30160
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
702 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
703 x_draw_vertical_border (w); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
704 UNBLOCK_INPUT; |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
707 updated_window = NULL; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
708 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
709 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
710 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
711 /* 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
|
712 update_end. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
713 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
714 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
715 x_update_end (f) |
771 | 716 struct frame *f; |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
717 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
718 /* Mouse highlight may be displayed again. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
719 FRAME_X_DISPLAY_INFO (f)->mouse_face_defer = 0; |
286 | 720 |
721 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
|
722 XFlush (FRAME_X_DISPLAY (f)); |
286 | 723 UNBLOCK_INPUT; |
724 } | |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
725 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
726 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
727 /* 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
|
728 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
|
729 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
|
730 |
21514 | 731 static void |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
732 XTframe_up_to_date (f) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
733 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
734 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
735 if (FRAME_X_P (f)) |
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 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
30160
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
738 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
739 if (dpyinfo->mouse_face_deferred_gc |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
740 || f == dpyinfo->mouse_face_mouse_frame) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
741 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
742 BLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
743 if (dpyinfo->mouse_face_mouse_frame) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
744 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
|
745 dpyinfo->mouse_face_mouse_x, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
746 dpyinfo->mouse_face_mouse_y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
747 dpyinfo->mouse_face_deferred_gc = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
748 UNBLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
749 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
750 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
751 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
752 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
753 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
754 /* 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
|
755 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
|
756 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
|
757 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
|
758 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
|
759 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
|
760 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
761 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
762 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
|
763 struct glyph_row *desired_row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
764 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
765 struct window *w = updated_window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
766 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
767 xassert (w); |
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 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
|
770 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
771 BLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
772 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
|
773 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
774 /* 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
|
775 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
|
776 if (windows_or_buffers_changed) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
777 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
778 struct frame *f = XFRAME (w->frame); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
779 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
|
780 int height = desired_row->visible_height; |
25465 | 781 int x = (window_box_right (w, -1) |
782 + 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
|
783 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
|
784 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
785 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
|
786 x, y, width, height, False); |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
789 UNBLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
790 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
791 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
792 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
793 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
794 /* 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
|
795 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
|
796 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
|
797 drawn. */ |
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 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
800 x_draw_bitmap (w, row, which) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
801 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
802 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
803 enum bitmap_type which; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
804 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
805 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
|
806 Display *display = FRAME_X_DISPLAY (f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
807 Window window = FRAME_X_WINDOW (f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
808 int x, y, wd, h, dy; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
809 unsigned char *bits; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
810 Pixmap pixmap; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
811 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
|
812 struct face *face; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
813 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
|
814 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
815 /* 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
|
816 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
|
817 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
818 switch (which) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
819 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
820 case LEFT_TRUNCATION_BITMAP: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
821 wd = left_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
822 h = left_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
823 bits = left_bits; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
824 x = (WINDOW_TO_FRAME_PIXEL_X (w, 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
825 - wd |
25465 | 826 - (FRAME_X_LEFT_FLAGS_AREA_WIDTH (f) - wd) / 2); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
827 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
828 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
829 case OVERLAY_ARROW_BITMAP: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
830 wd = left_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
831 h = left_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
832 bits = ov_bits; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
833 x = (WINDOW_TO_FRAME_PIXEL_X (w, 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
834 - wd |
25465 | 835 - (FRAME_X_LEFT_FLAGS_AREA_WIDTH (f) - wd) / 2); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
836 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
837 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
838 case RIGHT_TRUNCATION_BITMAP: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
839 wd = right_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
840 h = right_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
841 bits = right_bits; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
842 x = window_box_right (w, -1); |
25465 | 843 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
|
844 break; |
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 case CONTINUED_LINE_BITMAP: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
847 wd = right_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
848 h = right_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
849 bits = continued_bits; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
850 x = window_box_right (w, -1); |
25465 | 851 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
|
852 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
853 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
854 case CONTINUATION_LINE_BITMAP: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
855 wd = continuation_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
856 h = continuation_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
857 bits = continuation_bits; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
858 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
|
859 - wd |
25465 | 860 - (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
|
861 break; |
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 case ZV_LINE_BITMAP: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
864 wd = zv_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
865 h = zv_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
866 bits = zv_bits; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
867 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
|
868 - wd |
25465 | 869 - (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
|
870 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
871 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
872 default: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
873 abort (); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
874 } |
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 /* 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
|
877 start drawing the bitmap. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
878 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
|
879 dy = (row->height - h) / 2; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
880 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
881 /* 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
|
882 by the server. */ |
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 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
|
885 face->foreground, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
886 face->background, depth); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
887 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
|
888 XFreePixmap (display, pixmap); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
889 XSetClipMask (display, gc, None); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
890 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
891 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
892 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
893 /* 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
|
894 function with input blocked. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
895 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
896 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
897 x_draw_row_bitmaps (w, row) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
898 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
899 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
900 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
901 struct frame *f = XFRAME (w->frame); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
902 enum bitmap_type bitmap; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
903 struct face *face; |
25546 | 904 int header_line_height = -1; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
905 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
906 xassert (interrupt_input_blocked); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
907 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
908 /* 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
|
909 don't have to draw anything. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
910 if (row->visible_height <= 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
911 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
912 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
913 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
|
914 PREPARE_FACE_FOR_DISPLAY (f, face); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
915 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
916 /* 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
|
917 if (row->overlay_arrow_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
918 bitmap = OVERLAY_ARROW_BITMAP; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
919 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
|
920 bitmap = LEFT_TRUNCATION_BITMAP; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
921 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
|
922 bitmap = CONTINUATION_LINE_BITMAP; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
923 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
|
924 bitmap = ZV_LINE_BITMAP; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
925 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
926 bitmap = NO_BITMAP; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
927 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
928 /* 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
|
929 the flags area. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
930 if (bitmap == NO_BITMAP |
25465 | 931 || 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
|
932 || 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
|
933 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
934 /* 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
|
935 int border = ((XFASTINT (w->left) > 0 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
936 && !FRAME_HAS_VERTICAL_SCROLL_BARS (f)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
937 ? 1 : 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
938 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
|
939 |
25546 | 940 if (header_line_height < 0) |
941 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
|
942 |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
943 /* 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
|
944 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
|
945 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
|
946 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
|
947 if (face->stipple) |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
948 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
|
949 else |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
950 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
|
951 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
952 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
|
953 face->gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
954 (left |
25465 | 955 - 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
|
956 + border), |
25546 | 957 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
|
958 row->y)), |
25465 | 959 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
|
960 row->visible_height); |
25091
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
961 if (!face->stipple) |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
962 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
|
963 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
964 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
965 /* Draw the left bitmap. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
966 if (bitmap != NO_BITMAP) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
967 x_draw_bitmap (w, row, bitmap); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
968 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
969 /* 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
|
970 if (row->truncated_on_right_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
971 bitmap = RIGHT_TRUNCATION_BITMAP; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
972 else if (row->continued_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
973 bitmap = CONTINUED_LINE_BITMAP; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
974 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
975 bitmap = NO_BITMAP; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
976 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
977 /* 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
|
978 the flags area. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
979 if (bitmap == NO_BITMAP |
25465 | 980 || 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
|
981 || 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
|
982 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
983 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
|
984 |
25546 | 985 if (header_line_height < 0) |
986 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
|
987 |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
988 /* 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
|
989 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
|
990 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
|
991 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
|
992 if (face->stipple) |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
993 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
|
994 else |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
995 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
|
996 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
|
997 face->gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
998 right, |
25546 | 999 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
|
1000 row->y)), |
25465 | 1001 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
|
1002 row->visible_height); |
25091
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
1003 if (!face->stipple) |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
1004 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
|
1005 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1006 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1007 /* Draw the right bitmap. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1008 if (bitmap != NO_BITMAP) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1009 x_draw_bitmap (w, row, bitmap); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1010 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1011 |
286 | 1012 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1013 /*********************************************************************** |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1014 Line Highlighting |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1015 ***********************************************************************/ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1016 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1017 /* 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
|
1018 frames. Aborts when called. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1019 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1020 static void |
286 | 1021 XTreassert_line_highlight (new, vpos) |
1022 int new, vpos; | |
1023 { | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1024 abort (); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1025 } |
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 /* 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
|
1029 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
|
1030 called. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1031 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1032 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1033 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
|
1034 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
|
1035 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1036 abort (); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1037 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1038 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1039 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1040 /* 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
|
1041 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
|
1042 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
|
1043 rarely happens). */ |
286 | 1044 |
21514 | 1045 static void |
286 | 1046 XTset_terminal_modes () |
1047 { | |
1048 } | |
1049 | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1050 /* 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
|
1051 the X-windows go away, and suspending requires no action. */ |
286 | 1052 |
21514 | 1053 static void |
286 | 1054 XTreset_terminal_modes () |
1055 { | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1056 } |
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 |
286 | 1059 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1060 /*********************************************************************** |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1061 Output Cursor |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1062 ***********************************************************************/ |
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 /* 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
|
1065 positions are relative to updated_window. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1066 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1067 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1068 set_output_cursor (cursor) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1069 struct cursor_pos *cursor; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1070 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1071 output_cursor.hpos = cursor->hpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1072 output_cursor.vpos = cursor->vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1073 output_cursor.x = cursor->x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1074 output_cursor.y = cursor->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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1077 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1078 /* Set a nominal cursor position. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1079 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1080 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
|
1081 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
|
1082 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1083 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
|
1084 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
|
1085 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
|
1086 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
|
1087 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1088 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1089 XTcursor_to (vpos, hpos, y, x) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1090 int vpos, hpos, y, x; |
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 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1093 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1094 /* 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
|
1095 if (updated_window) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1096 w = updated_window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1097 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1098 w = XWINDOW (selected_window); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1099 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1100 /* Set the output cursor. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1101 output_cursor.hpos = hpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1102 output_cursor.vpos = vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1103 output_cursor.x = x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1104 output_cursor.y = y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1105 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1106 /* 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
|
1107 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
|
1108 if (updated_window == NULL) |
286 | 1109 { |
1110 BLOCK_INPUT; | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1111 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
|
1112 XFlush (FRAME_X_DISPLAY (SELECTED_FRAME ())); |
286 | 1113 UNBLOCK_INPUT; |
1114 } | |
1115 } | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1116 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1117 |
286 | 1118 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1119 /*********************************************************************** |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1120 Display Iterator |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1121 ***********************************************************************/ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1122 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1123 /* Function prototypes of this page. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1124 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1125 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
|
1126 struct glyph *, |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1127 XChar2b *, |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1128 int *)); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1129 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
|
1130 int, XChar2b *, int)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1131 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
|
1132 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
|
1133 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
|
1134 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
|
1135 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
|
1136 int, int, double)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1137 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
|
1138 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
|
1139 |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1140 |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1141 /* 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
|
1142 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
|
1143 |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1144 #define PER_CHAR_METRIC(font, b) \ |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1145 ((font)->per_char \ |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1146 ? ((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
|
1147 + (((font)->min_byte1 || (font)->max_byte1) \ |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1148 ? (((b)->byte1 - (font)->min_byte1) \ |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1149 * ((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
|
1150 : 0)) \ |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1151 : &((font)->max_bounds)) |
27974
d443ad369a18
(PER_CHAR_METRIC): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27967
diff
changeset
|
1152 |
d443ad369a18
(PER_CHAR_METRIC): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27967
diff
changeset
|
1153 |
d443ad369a18
(PER_CHAR_METRIC): Removed.
Gerd Moellmann <gerd@gnu.org>
parents:
27967
diff
changeset
|
1154 /* 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
|
1155 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
|
1156 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1157 static INLINE XCharStruct * |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1158 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
|
1159 XFontStruct *font; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1160 XChar2b *char2b; |
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 /* The result metric information. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1163 XCharStruct *pcm = NULL; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1164 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1165 xassert (font && char2b); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1166 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1167 if (font->per_char != NULL) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1168 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1169 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
|
1170 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1171 /* 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
|
1172 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
|
1173 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
|
1174 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
|
1175 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
|
1176 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
|
1177 if (char2b->byte1 == 0 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1178 && 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
|
1179 && 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
|
1180 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
|
1181 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1182 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1183 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1184 /* 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
|
1185 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
|
1186 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
|
1187 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
|
1188 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1189 byte1 = N/D + min_byte1 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1190 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
|
1191 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1192 where: |
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 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
|
1195 / = integer division |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1196 \ = integer modulus */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1197 if (char2b->byte1 >= font->min_byte1 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1198 && char2b->byte1 <= font->max_byte1 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1199 && 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
|
1200 && 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
|
1201 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1202 pcm = (font->per_char |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1203 + ((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
|
1204 * (char2b->byte1 - font->min_byte1)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1205 + (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
|
1206 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1207 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1208 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1209 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1210 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1211 /* 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
|
1212 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
|
1213 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
|
1214 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
|
1215 && 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
|
1216 pcm = &font->max_bounds; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1217 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1218 |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1219 return ((pcm == NULL |
29600
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
1220 || (pcm->width == 0 && (pcm->rbearing - pcm->lbearing) == 0)) |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1221 ? NULL : pcm); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1222 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1223 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1224 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1225 /* 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
|
1226 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
|
1227 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1228 static INLINE void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1229 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
|
1230 int c; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1231 XChar2b *char2b; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1232 struct font_info *font_info; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1233 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1234 int charset = CHAR_CHARSET (c); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1235 XFontStruct *font = font_info->font; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1236 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1237 /* 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
|
1238 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
|
1239 fixed encoding. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1240 if (font_info->font_encoder) |
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 /* It's a program. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1243 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
|
1244 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1245 if (CHARSET_DIMENSION (charset) == 1) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1246 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1247 ccl->reg[0] = charset; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1248 ccl->reg[1] = char2b->byte2; |
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 else |
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 ccl->reg[0] = charset; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1253 ccl->reg[1] = char2b->byte1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1254 ccl->reg[2] = char2b->byte2; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1255 } |
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 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
|
1258 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1259 /* 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
|
1260 program. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1261 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
|
1262 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
|
1263 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1264 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
|
1265 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1266 else if (font_info->encoding[charset]) |
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 /* 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
|
1269 encoding numbers. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1270 int enc = font_info->encoding[charset]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1271 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1272 if ((enc == 1 || enc == 2) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1273 && CHARSET_DIMENSION (charset) == 2) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1274 char2b->byte1 |= 0x80; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1275 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1276 if (enc == 1 || enc == 3) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1277 char2b->byte2 |= 0x80; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1278 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1279 } |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1282 /* 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
|
1283 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
|
1284 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
|
1285 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
|
1286 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1287 static INLINE struct face * |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1288 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
|
1289 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1290 int c, face_id; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1291 XChar2b *char2b; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1292 int multibyte_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1293 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1294 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
|
1295 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1296 if (!multibyte_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1297 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1298 /* 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
|
1299 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
|
1300 char2b->byte1 = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1301 char2b->byte2 = c; |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1302 face_id = FACE_FOR_CHAR (f, face, c); |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1303 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
|
1304 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1305 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
|
1306 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1307 /* 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
|
1308 char2b->byte1 = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1309 char2b->byte2 = c; |
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 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1312 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1313 int c1, c2, charset; |
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 /* 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
|
1316 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
|
1317 SPLIT_CHAR (c, charset, c1, c2); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1318 if (c2 > 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1319 char2b->byte1 = c1, char2b->byte2 = c2; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1320 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1321 char2b->byte1 = 0, char2b->byte2 = c1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1322 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1323 /* Maybe encode the character in *CHAR2B. */ |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1324 if (face->font != NULL) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1325 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1326 struct font_info *font_info |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1327 = FONT_INFO_FROM_ID (f, face->font_info_id); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1328 if (font_info) |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1329 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
|
1330 } |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1333 /* 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
|
1334 xassert (face != NULL); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1335 PREPARE_FACE_FOR_DISPLAY (f, face); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1336 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1337 return face; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1338 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1339 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1340 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1341 /* 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
|
1342 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
|
1343 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
|
1344 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1345 static INLINE struct face * |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1346 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
|
1347 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1348 struct glyph *glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1349 XChar2b *char2b; |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1350 int *two_byte_p; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1351 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1352 struct face *face; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1353 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1354 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
|
1355 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
|
1356 |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1357 if (two_byte_p) |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1358 *two_byte_p = 0; |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1359 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1360 if (!glyph->multibyte_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1361 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1362 /* 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
|
1363 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
|
1364 char2b->byte1 = 0; |
27000
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
1365 char2b->byte2 = glyph->u.ch; |
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
1366 } |
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
1367 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
|
1368 && 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
|
1369 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1370 /* 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
|
1371 char2b->byte1 = 0; |
27000
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
1372 char2b->byte2 = glyph->u.ch; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1373 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1374 else |
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 int c1, c2, charset; |
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 /* 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
|
1379 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
|
1380 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
|
1381 if (c2 > 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1382 char2b->byte1 = c1, char2b->byte2 = c2; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1383 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1384 char2b->byte1 = 0, char2b->byte2 = c1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1385 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1386 /* Maybe encode the character in *CHAR2B. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1387 if (charset != CHARSET_ASCII) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1388 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1389 struct font_info *font_info |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1390 = 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
|
1391 if (font_info) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1392 { |
27000
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
1393 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
|
1394 if (two_byte_p) |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1395 *two_byte_p |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1396 = ((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
|
1397 } |
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 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1400 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1401 /* 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
|
1402 xassert (face != NULL); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1403 PREPARE_FACE_FOR_DISPLAY (f, face); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1404 return face; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1405 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1406 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1407 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1408 /* 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
|
1409 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
|
1410 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1411 static INLINE void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1412 x_append_glyph (it) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1413 struct it *it; |
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 struct glyph *glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1416 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
|
1417 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1418 xassert (it->glyph_row); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1419 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
|
1420 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1421 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
|
1422 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
|
1423 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1424 glyph->charpos = CHARPOS (it->position); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1425 glyph->object = it->object; |
30042
22270db6dbeb
(x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents:
29948
diff
changeset
|
1426 glyph->pixel_width = it->pixel_width; |
22270db6dbeb
(x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents:
29948
diff
changeset
|
1427 glyph->voffset = it->voffset; |
22270db6dbeb
(x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents:
29948
diff
changeset
|
1428 glyph->type = CHAR_GLYPH; |
22270db6dbeb
(x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents:
29948
diff
changeset
|
1429 glyph->multibyte_p = it->multibyte_p; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1430 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
|
1431 glyph->right_box_line_p = it->end_of_box_run_p; |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
1432 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
|
1433 || it->phys_descent > it->descent); |
30042
22270db6dbeb
(x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents:
29948
diff
changeset
|
1434 glyph->padding_p = 0; |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1435 glyph->glyph_not_available_p = it->glyph_not_available_p; |
30042
22270db6dbeb
(x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents:
29948
diff
changeset
|
1436 glyph->face_id = it->face_id; |
22270db6dbeb
(x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents:
29948
diff
changeset
|
1437 glyph->u.ch = it->char_to_display; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1438 ++it->glyph_row->used[area]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1439 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1440 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1441 |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1442 /* 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
|
1443 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
|
1444 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1445 static INLINE void |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1446 x_append_composite_glyph (it) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1447 struct it *it; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1448 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1449 struct glyph *glyph; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1450 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
|
1451 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1452 xassert (it->glyph_row); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1453 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1454 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
|
1455 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
|
1456 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1457 glyph->charpos = CHARPOS (it->position); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1458 glyph->object = it->object; |
30042
22270db6dbeb
(x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents:
29948
diff
changeset
|
1459 glyph->pixel_width = it->pixel_width; |
22270db6dbeb
(x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents:
29948
diff
changeset
|
1460 glyph->voffset = it->voffset; |
22270db6dbeb
(x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents:
29948
diff
changeset
|
1461 glyph->type = COMPOSITE_GLYPH; |
22270db6dbeb
(x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents:
29948
diff
changeset
|
1462 glyph->multibyte_p = it->multibyte_p; |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1463 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
|
1464 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
|
1465 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
|
1466 || it->phys_descent > it->descent); |
30042
22270db6dbeb
(x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents:
29948
diff
changeset
|
1467 glyph->padding_p = 0; |
22270db6dbeb
(x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents:
29948
diff
changeset
|
1468 glyph->glyph_not_available_p = 0; |
22270db6dbeb
(x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents:
29948
diff
changeset
|
1469 glyph->face_id = it->face_id; |
22270db6dbeb
(x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents:
29948
diff
changeset
|
1470 glyph->u.cmp_id = it->cmp_id; |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1471 ++it->glyph_row->used[area]; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1472 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1473 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1474 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1475 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1476 /* 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
|
1477 IT->voffset. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1478 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1479 static INLINE void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1480 take_vertical_position_into_account (it) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1481 struct it *it; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1482 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1483 if (it->voffset) |
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 if (it->voffset < 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1486 /* 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
|
1487 in the line. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1488 it->ascent += abs (it->voffset); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1489 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1490 /* 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
|
1491 in the line. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1492 it->descent += it->voffset; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1493 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1494 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1495 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1496 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1497 /* 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
|
1498 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
|
1499 an overview of struct display_iterator. */ |
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 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1502 x_produce_image_glyph (it) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1503 struct it *it; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1504 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1505 struct image *img; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1506 struct face *face; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1507 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1508 xassert (it->what == IT_IMAGE); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1509 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1510 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
|
1511 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
|
1512 xassert (img); |
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 /* 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
|
1515 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
|
1516 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
|
1517 |
28785
796eafcfc070
(x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents:
28686
diff
changeset
|
1518 it->ascent = it->phys_ascent = image_ascent (img, face); |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
1519 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
|
1520 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
|
1521 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1522 it->nglyphs = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1523 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1524 if (face->box != FACE_NO_BOX) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1525 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1526 it->ascent += face->box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1527 it->descent += face->box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1528 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1529 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
|
1530 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
|
1531 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
|
1532 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
|
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 take_vertical_position_into_account (it); |
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 if (it->glyph_row) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1538 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1539 struct glyph *glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1540 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
|
1541 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1542 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
|
1543 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
|
1544 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1545 glyph->charpos = CHARPOS (it->position); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1546 glyph->object = it->object; |
30042
22270db6dbeb
(x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents:
29948
diff
changeset
|
1547 glyph->pixel_width = it->pixel_width; |
22270db6dbeb
(x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents:
29948
diff
changeset
|
1548 glyph->voffset = it->voffset; |
22270db6dbeb
(x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents:
29948
diff
changeset
|
1549 glyph->type = IMAGE_GLYPH; |
22270db6dbeb
(x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents:
29948
diff
changeset
|
1550 glyph->multibyte_p = it->multibyte_p; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1551 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
|
1552 glyph->right_box_line_p = it->end_of_box_run_p; |
30042
22270db6dbeb
(x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents:
29948
diff
changeset
|
1553 glyph->overlaps_vertically_p = 0; |
22270db6dbeb
(x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents:
29948
diff
changeset
|
1554 glyph->padding_p = 0; |
22270db6dbeb
(x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents:
29948
diff
changeset
|
1555 glyph->glyph_not_available_p = 0; |
22270db6dbeb
(x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents:
29948
diff
changeset
|
1556 glyph->face_id = it->face_id; |
22270db6dbeb
(x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents:
29948
diff
changeset
|
1557 glyph->u.img_id = img->id; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1558 ++it->glyph_row->used[area]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1559 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1560 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1561 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1562 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1563 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1564 /* 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
|
1565 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
|
1566 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
|
1567 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
|
1568 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1569 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1570 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
|
1571 struct it *it; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1572 Lisp_Object object; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1573 int width, height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1574 double ascent; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1575 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1576 struct glyph *glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1577 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
|
1578 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1579 xassert (ascent >= 0 && ascent <= 1); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1580 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1581 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
|
1582 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
|
1583 { |
30042
22270db6dbeb
(x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents:
29948
diff
changeset
|
1584 glyph->charpos = CHARPOS (it->position); |
22270db6dbeb
(x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents:
29948
diff
changeset
|
1585 glyph->object = object; |
22270db6dbeb
(x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents:
29948
diff
changeset
|
1586 glyph->pixel_width = width; |
22270db6dbeb
(x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents:
29948
diff
changeset
|
1587 glyph->voffset = it->voffset; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1588 glyph->type = STRETCH_GLYPH; |
30042
22270db6dbeb
(x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents:
29948
diff
changeset
|
1589 glyph->multibyte_p = it->multibyte_p; |
22270db6dbeb
(x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents:
29948
diff
changeset
|
1590 glyph->left_box_line_p = it->start_of_box_run_p; |
22270db6dbeb
(x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents:
29948
diff
changeset
|
1591 glyph->right_box_line_p = it->end_of_box_run_p; |
22270db6dbeb
(x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents:
29948
diff
changeset
|
1592 glyph->overlaps_vertically_p = 0; |
22270db6dbeb
(x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents:
29948
diff
changeset
|
1593 glyph->padding_p = 0; |
22270db6dbeb
(x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents:
29948
diff
changeset
|
1594 glyph->glyph_not_available_p = 0; |
22270db6dbeb
(x_append_glyph, x_append_composite_glyph)
Gerd Moellmann <gerd@gnu.org>
parents:
29948
diff
changeset
|
1595 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
|
1596 glyph->u.stretch.ascent = height * ascent; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1597 glyph->u.stretch.height = height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1598 ++it->glyph_row->used[area]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1599 } |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1602 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1603 /* 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
|
1604 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
|
1605 `(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
|
1606 being recognized: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1607 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1608 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
|
1609 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
|
1610 point number. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1611 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1612 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
|
1613 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
|
1614 `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
|
1615 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1616 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
|
1617 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
|
1618 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1619 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
|
1620 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1621 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
|
1622 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
|
1623 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1624 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
|
1625 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
|
1626 the glyph property. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1627 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1628 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
|
1629 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1630 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
|
1631 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
|
1632 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
|
1633 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1634 #define NUMVAL(X) \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1635 ((INTEGERP (X) || FLOATP (X)) \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1636 ? XFLOATINT (X) \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1637 : - 1) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1638 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1639 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1640 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1641 x_produce_stretch_glyph (it) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1642 struct it *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 /* (space :width WIDTH :height HEIGHT. */ |
29600
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
1645 #if GLYPH_DEBUG |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
1646 extern Lisp_Object Qspace; |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
1647 #endif |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
1648 extern Lisp_Object QCwidth, QCheight, QCascent; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1649 extern Lisp_Object QCrelative_width, QCrelative_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1650 extern Lisp_Object QCalign_to; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1651 Lisp_Object prop, plist; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1652 double width = 0, height = 0, ascent = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1653 struct face *face = FACE_FROM_ID (it->f, it->face_id); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1654 XFontStruct *font = face->font ? face->font : FRAME_FONT (it->f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1655 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1656 PREPARE_FACE_FOR_DISPLAY (it->f, face); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1657 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1658 /* List should start with `space'. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1659 xassert (CONSP (it->object) && EQ (XCAR (it->object), Qspace)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1660 plist = XCDR (it->object); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1661 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1662 /* Compute the width of the stretch. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1663 if (prop = Fplist_get (plist, QCwidth), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1664 NUMVAL (prop) > 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1665 /* Absolute width `:width WIDTH' specified and valid. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1666 width = NUMVAL (prop) * CANON_X_UNIT (it->f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1667 else if (prop = Fplist_get (plist, QCrelative_width), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1668 NUMVAL (prop) > 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1669 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1670 /* Relative width `:relative-width FACTOR' specified and valid. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1671 Compute the width of the characters having the `glyph' |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1672 property. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1673 struct it it2; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1674 unsigned char *p = BYTE_POS_ADDR (IT_BYTEPOS (*it)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1675 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1676 it2 = *it; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1677 if (it->multibyte_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1678 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1679 int maxlen = ((IT_BYTEPOS (*it) >= GPT ? ZV : GPT) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1680 - IT_BYTEPOS (*it)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1681 it2.c = STRING_CHAR_AND_LENGTH (p, maxlen, it2.len); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1682 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1683 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1684 it2.c = *p, it2.len = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1685 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1686 it2.glyph_row = NULL; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1687 it2.what = IT_CHARACTER; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1688 x_produce_glyphs (&it2); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1689 width = NUMVAL (prop) * it2.pixel_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1690 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1691 else if (prop = Fplist_get (plist, QCalign_to), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1692 NUMVAL (prop) > 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1693 width = NUMVAL (prop) * CANON_X_UNIT (it->f) - it->current_x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1694 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1695 /* Nothing specified -> width defaults to canonical char width. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1696 width = CANON_X_UNIT (it->f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1697 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1698 /* Compute height. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1699 if (prop = Fplist_get (plist, QCheight), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1700 NUMVAL (prop) > 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1701 height = NUMVAL (prop) * CANON_Y_UNIT (it->f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1702 else if (prop = Fplist_get (plist, QCrelative_height), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1703 NUMVAL (prop) > 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1704 height = FONT_HEIGHT (font) * NUMVAL (prop); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1705 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1706 height = FONT_HEIGHT (font); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1707 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1708 /* Compute percentage of height used for ascent. If |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1709 `:ascent ASCENT' is present and valid, use that. Otherwise, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1710 derive the ascent from the font in use. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1711 if (prop = Fplist_get (plist, QCascent), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1712 NUMVAL (prop) > 0 && NUMVAL (prop) <= 100) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1713 ascent = NUMVAL (prop) / 100.0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1714 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1715 ascent = (double) font->ascent / FONT_HEIGHT (font); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1716 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1717 if (width <= 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1718 width = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1719 if (height <= 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1720 height = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1721 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1722 if (it->glyph_row) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1723 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1724 Lisp_Object object = it->stack[it->sp - 1].string; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1725 if (!STRINGP (object)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1726 object = it->w->buffer; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1727 x_append_stretch_glyph (it, object, width, height, ascent); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1728 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1729 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1730 it->pixel_width = width; |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
1731 it->ascent = it->phys_ascent = height * ascent; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
1732 it->descent = it->phys_descent = height - it->ascent; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1733 it->nglyphs = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1734 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1735 if (face->box != FACE_NO_BOX) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1736 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1737 it->ascent += face->box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1738 it->descent += face->box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1739 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1740 if (it->start_of_box_run_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1741 it->pixel_width += face->box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1742 if (it->end_of_box_run_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1743 it->pixel_width += face->box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1744 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1745 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1746 take_vertical_position_into_account (it); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1747 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1748 |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1749 /* Return proper value to be used as baseline offset of font that has |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1750 ASCENT and DESCENT to draw characters by the font at the vertical |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1751 center of the line of frame F. |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1752 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1753 Here, out task is to find the value of BOFF in the following figure; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1754 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1755 -------------------------+-----------+- |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1756 -+-+---------+-+ | | |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1757 | | | | | | |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1758 | | | | F_ASCENT F_HEIGHT |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1759 | | | ASCENT | | |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1760 HEIGHT | | | | | |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1761 | | |-|-+------+-----------|------- baseline |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1762 | | | | BOFF | | |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1763 | |---------|-+-+ | | |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1764 | | | DESCENT | | |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1765 -+-+---------+-+ F_DESCENT | |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1766 -------------------------+-----------+- |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1767 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1768 -BOFF + DESCENT + (F_HEIGHT - HEIGHT) / 2 = F_DESCENT |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1769 BOFF = DESCENT + (F_HEIGHT - HEIGHT) / 2 - F_DESCENT |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1770 DESCENT = FONT->descent |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1771 HEIGHT = FONT_HEIGHT (FONT) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1772 F_DESCENT = (F->output_data.x->font->descent |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1773 - F->output_data.x->baseline_offset) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1774 F_HEIGHT = FRAME_LINE_HEIGHT (F) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1775 */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1776 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1777 #define VCENTER_BASELINE_OFFSET(FONT, F) \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1778 ((FONT)->descent \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1779 + (FRAME_LINE_HEIGHT ((F)) - FONT_HEIGHT ((FONT))) / 2 \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1780 - ((F)->output_data.x->font->descent - (F)->output_data.x->baseline_offset)) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1781 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1782 /* Produce glyphs/get display metrics for the display element IT is |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1783 loaded with. See the description of struct display_iterator in |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1784 dispextern.h for an overview of struct display_iterator. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1785 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1786 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1787 x_produce_glyphs (it) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1788 struct it *it; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1789 { |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1790 it->glyph_not_available_p = 0; |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1791 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1792 if (it->what == IT_CHARACTER) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1793 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1794 XChar2b char2b; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1795 XFontStruct *font; |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1796 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
|
1797 XCharStruct *pcm; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1798 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
|
1799 struct font_info *font_info; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1800 int boff; /* baseline offset */ |
32401
be53a078f4e2
(x_produce_glyphs): Handle unibyte_display_via_language_environment
Kenichi Handa <handa@m17n.org>
parents:
31948
diff
changeset
|
1801 /* We may change it->multibyte_p upon unibyte<->multibyte |
be53a078f4e2
(x_produce_glyphs): Handle unibyte_display_via_language_environment
Kenichi Handa <handa@m17n.org>
parents:
31948
diff
changeset
|
1802 conversion. So, save the current value now and restore it |
be53a078f4e2
(x_produce_glyphs): Handle unibyte_display_via_language_environment
Kenichi Handa <handa@m17n.org>
parents:
31948
diff
changeset
|
1803 later. |
be53a078f4e2
(x_produce_glyphs): Handle unibyte_display_via_language_environment
Kenichi Handa <handa@m17n.org>
parents:
31948
diff
changeset
|
1804 |
be53a078f4e2
(x_produce_glyphs): Handle unibyte_display_via_language_environment
Kenichi Handa <handa@m17n.org>
parents:
31948
diff
changeset
|
1805 Note: It seems that we don't have to record multibyte_p in |
be53a078f4e2
(x_produce_glyphs): Handle unibyte_display_via_language_environment
Kenichi Handa <handa@m17n.org>
parents:
31948
diff
changeset
|
1806 struct glyph because the character code itself tells if or |
be53a078f4e2
(x_produce_glyphs): Handle unibyte_display_via_language_environment
Kenichi Handa <handa@m17n.org>
parents:
31948
diff
changeset
|
1807 not the character is multibyte. Thus, in the future, we must |
be53a078f4e2
(x_produce_glyphs): Handle unibyte_display_via_language_environment
Kenichi Handa <handa@m17n.org>
parents:
31948
diff
changeset
|
1808 consider eliminating the field `multibyte_p' in the struct |
be53a078f4e2
(x_produce_glyphs): Handle unibyte_display_via_language_environment
Kenichi Handa <handa@m17n.org>
parents:
31948
diff
changeset
|
1809 glyph. |
be53a078f4e2
(x_produce_glyphs): Handle unibyte_display_via_language_environment
Kenichi Handa <handa@m17n.org>
parents:
31948
diff
changeset
|
1810 */ |
be53a078f4e2
(x_produce_glyphs): Handle unibyte_display_via_language_environment
Kenichi Handa <handa@m17n.org>
parents:
31948
diff
changeset
|
1811 int saved_multibyte_p = it->multibyte_p; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1812 |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1813 /* 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
|
1814 other way. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1815 it->char_to_display = it->c; |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1816 if (!ASCII_BYTE_P (it->c)) |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1817 { |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1818 if (unibyte_display_via_language_environment |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1819 && SINGLE_BYTE_CHAR_P (it->c) |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1820 && (it->c >= 0240 |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1821 || !NILP (Vnonascii_translation_table))) |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1822 { |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1823 it->char_to_display = unibyte_char_to_multibyte (it->c); |
32401
be53a078f4e2
(x_produce_glyphs): Handle unibyte_display_via_language_environment
Kenichi Handa <handa@m17n.org>
parents:
31948
diff
changeset
|
1824 it->multibyte_p = 1; |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1825 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
|
1826 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
|
1827 } |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1828 else if (!SINGLE_BYTE_CHAR_P (it->c) |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1829 && !it->multibyte_p) |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1830 { |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1831 it->char_to_display = multibyte_char_to_unibyte (it->c, Qnil); |
32401
be53a078f4e2
(x_produce_glyphs): Handle unibyte_display_via_language_environment
Kenichi Handa <handa@m17n.org>
parents:
31948
diff
changeset
|
1832 it->multibyte_p = 0; |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1833 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
|
1834 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
|
1835 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1836 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1837 |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1838 /* 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
|
1839 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
|
1840 it->face_id, &char2b, |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1841 it->multibyte_p); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1842 font = face->font; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1843 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1844 /* 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
|
1845 font_not_found_p = font == NULL; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1846 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
|
1847 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1848 font = FRAME_FONT (it->f); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1849 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
|
1850 font_info = NULL; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1851 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1852 else |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1853 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1854 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
|
1855 boff = font_info->baseline_offset; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1856 if (font_info->vertical_centering) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1857 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
|
1858 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1859 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1860 if (it->char_to_display >= ' ' |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1861 && (!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
|
1862 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1863 /* Either unibyte or ASCII. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1864 int stretched_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1865 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1866 it->nglyphs = 1; |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
1867 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
1868 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
|
1869 it->ascent = font->ascent + boff; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1870 it->descent = font->descent - boff; |
28443
17fb2089c222
(x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents:
28417
diff
changeset
|
1871 |
17fb2089c222
(x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents:
28417
diff
changeset
|
1872 if (pcm) |
17fb2089c222
(x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents:
28417
diff
changeset
|
1873 { |
17fb2089c222
(x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents:
28417
diff
changeset
|
1874 it->phys_ascent = pcm->ascent + boff; |
17fb2089c222
(x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents:
28417
diff
changeset
|
1875 it->phys_descent = pcm->descent - boff; |
17fb2089c222
(x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents:
28417
diff
changeset
|
1876 it->pixel_width = pcm->width; |
17fb2089c222
(x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents:
28417
diff
changeset
|
1877 } |
17fb2089c222
(x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents:
28417
diff
changeset
|
1878 else |
17fb2089c222
(x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents:
28417
diff
changeset
|
1879 { |
17fb2089c222
(x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents:
28417
diff
changeset
|
1880 it->glyph_not_available_p = 1; |
17fb2089c222
(x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents:
28417
diff
changeset
|
1881 it->phys_ascent = font->ascent + boff; |
17fb2089c222
(x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents:
28417
diff
changeset
|
1882 it->phys_descent = font->descent - boff; |
17fb2089c222
(x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents:
28417
diff
changeset
|
1883 it->pixel_width = FONT_WIDTH (font); |
17fb2089c222
(x_produce_glyphs): When displaying unibyte text
Gerd Moellmann <gerd@gnu.org>
parents:
28417
diff
changeset
|
1884 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1885 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1886 /* 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
|
1887 `space-width' property, change its width. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1888 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
|
1889 if (stretched_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1890 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
|
1891 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1892 /* 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
|
1893 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
|
1894 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
|
1895 if (face->box != FACE_NO_BOX) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1896 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1897 int thick = face->box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1898 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1899 it->ascent += thick; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1900 it->descent += thick; |
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 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
|
1903 it->pixel_width += thick; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1904 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
|
1905 it->pixel_width += thick; |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1908 /* 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
|
1909 (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
|
1910 if (face->overline_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1911 it->ascent += 2; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1912 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1913 take_vertical_position_into_account (it); |
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 /* 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
|
1916 if (it->glyph_row) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1917 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1918 if (stretched_p) |
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 /* 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
|
1921 into a stretch glyph. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1922 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
|
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 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1927 x_append_glyph (it); |
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 /* 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
|
1930 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
|
1931 glyph row. This is used to optimize X output code. */ |
28629
437e522505fb
(x_produce_glyphs) <ASCII chars>: Take into account
Gerd Moellmann <gerd@gnu.org>
parents:
28443
diff
changeset
|
1932 if (pcm && (pcm->lbearing < 0 || pcm->rbearing > pcm->width)) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1933 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
|
1934 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1935 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1936 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
|
1937 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1938 /* 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
|
1939 it->pixel_width = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1940 it->nglyphs = 0; |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1941 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
|
1942 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
|
1943 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1944 if (face->box != FACE_NO_BOX) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1945 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1946 int thick = face->box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1947 it->ascent += thick; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1948 it->descent += thick; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1949 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1950 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1951 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
|
1952 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1953 int tab_width = it->tab_width * CANON_X_UNIT (it->f); |
28686
b02f0d91b5aa
(x_produce_glyphs): Remove reference to struct it's
Gerd Moellmann <gerd@gnu.org>
parents:
28629
diff
changeset
|
1954 int x = it->current_x + it->continuation_lines_width; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1955 int next_tab_x = ((1 + x + tab_width - 1) / tab_width) * tab_width; |
31614
410df09028db
(x_produce_glyphs): If the distance from the current
Gerd Moellmann <gerd@gnu.org>
parents:
31489
diff
changeset
|
1956 |
410df09028db
(x_produce_glyphs): If the distance from the current
Gerd Moellmann <gerd@gnu.org>
parents:
31489
diff
changeset
|
1957 /* If the distance from the current position to the next tab |
410df09028db
(x_produce_glyphs): If the distance from the current
Gerd Moellmann <gerd@gnu.org>
parents:
31489
diff
changeset
|
1958 stop is less than a canonical character width, use the |
410df09028db
(x_produce_glyphs): If the distance from the current
Gerd Moellmann <gerd@gnu.org>
parents:
31489
diff
changeset
|
1959 tab stop after that. */ |
410df09028db
(x_produce_glyphs): If the distance from the current
Gerd Moellmann <gerd@gnu.org>
parents:
31489
diff
changeset
|
1960 if (next_tab_x - x < CANON_X_UNIT (it->f)) |
410df09028db
(x_produce_glyphs): If the distance from the current
Gerd Moellmann <gerd@gnu.org>
parents:
31489
diff
changeset
|
1961 next_tab_x += tab_width; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1962 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1963 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
|
1964 it->nglyphs = 1; |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1965 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
|
1966 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
|
1967 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1968 if (it->glyph_row) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1969 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1970 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
|
1971 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
|
1972 it->ascent + it->descent, ascent); |
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 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1975 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1976 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1977 /* 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
|
1978 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
|
1979 width of the font. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1980 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1981 /* 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
|
1982 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
|
1983 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
|
1984 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
|
1985 did. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
1986 pcm = x_per_char_metric (font, &char2b); |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1987 if (font_not_found_p || !pcm) |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1988 { |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1989 int charset = CHAR_CHARSET (it->char_to_display); |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1990 |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1991 it->glyph_not_available_p = 1; |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1992 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
|
1993 * CHARSET_WIDTH (charset)); |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1994 it->phys_ascent = font->ascent + boff; |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1995 it->phys_descent = font->descent - boff; |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1996 } |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1997 else |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1998 { |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
1999 it->pixel_width = pcm->width; |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
2000 it->phys_ascent = pcm->ascent + boff; |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
2001 it->phys_descent = pcm->descent - boff; |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
2002 if (it->glyph_row |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
2003 && (pcm->lbearing < 0 |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
2004 || pcm->rbearing > pcm->width)) |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
2005 it->glyph_row->contains_overlapping_glyphs_p = 1; |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
2006 } |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2007 it->nglyphs = 1; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2008 it->ascent = font->ascent + boff; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2009 it->descent = font->descent - boff; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2010 if (face->box != FACE_NO_BOX) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2011 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2012 int thick = face->box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2013 it->ascent += thick; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2014 it->descent += thick; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2015 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2016 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
|
2017 it->pixel_width += thick; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2018 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
|
2019 it->pixel_width += thick; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2020 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2021 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2022 /* 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
|
2023 (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
|
2024 if (face->overline_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2025 it->ascent += 2; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2026 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2027 take_vertical_position_into_account (it); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2028 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2029 if (it->glyph_row) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2030 x_append_glyph (it); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2031 } |
32401
be53a078f4e2
(x_produce_glyphs): Handle unibyte_display_via_language_environment
Kenichi Handa <handa@m17n.org>
parents:
31948
diff
changeset
|
2032 it->multibyte_p = saved_multibyte_p; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2033 } |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2034 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
|
2035 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2036 /* 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
|
2037 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
|
2038 XChar2b char2b; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2039 XFontStruct *font; |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
2040 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
|
2041 XCharStruct *pcm; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2042 int font_not_found_p; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2043 struct font_info *font_info; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2044 int boff; /* baseline offset */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2045 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
|
2046 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2047 /* 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
|
2048 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
|
2049 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
|
2050 && 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
|
2051 && (it->c >= 0240 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2052 || (it->c >= 0200 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2053 && !NILP (Vnonascii_translation_table)))) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2054 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2055 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
|
2056 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2057 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2058 /* 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
|
2059 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
|
2060 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
|
2061 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
|
2062 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
|
2063 font = face->font; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2064 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2065 /* 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
|
2066 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
|
2067 if (font_not_found_p) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2068 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2069 font = FRAME_FONT (it->f); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2070 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
|
2071 font_info = NULL; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2072 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2073 else |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2074 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2075 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
|
2076 boff = font_info->baseline_offset; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2077 if (font_info->vertical_centering) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2078 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
|
2079 } |
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 /* 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
|
2082 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
|
2083 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
|
2084 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
|
2085 it->nglyphs = 1; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2086 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2087 /* 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
|
2088 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
|
2089 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
|
2090 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
|
2091 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
|
2092 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
|
2093 correct the display anyway. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2094 if (cmp->font != (void *) font) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2095 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2096 /* 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
|
2097 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
|
2098 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
|
2099 them respectively. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2100 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
|
2101 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
|
2102 /* 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
|
2103 int leftmost, rightmost, lowest, highest; |
28793
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2104 int i, width, ascent, descent; |
26879
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 cmp->font = (void *) font; |
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 /* Initialize the bounding box. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2109 pcm = x_per_char_metric (font, &char2b); |
28793
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2110 if (pcm) |
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2111 { |
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2112 width = pcm->width; |
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2113 ascent = pcm->ascent; |
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2114 descent = pcm->descent; |
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2115 } |
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2116 else |
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2117 { |
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2118 width = FONT_WIDTH (font); |
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2119 ascent = font->ascent; |
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2120 descent = font->descent; |
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2121 } |
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2122 |
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2123 rightmost = width; |
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2124 lowest = - descent + boff; |
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2125 highest = ascent + boff; |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2126 leftmost = 0; |
28793
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2127 |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2128 if (font_info |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2129 && font_info->default_ascent |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2130 && 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
|
2131 && !NILP (Faref (Vuse_default_ascent, |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2132 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
|
2133 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
|
2134 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2135 /* 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
|
2136 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
|
2137 the left. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2138 cmp->offsets[0] = 0; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2139 cmp->offsets[1] = boff; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2140 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2141 /* 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
|
2142 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
|
2143 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2144 int left, right, btm, top; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2145 int ch = COMPOSITION_GLYPH (cmp, i); |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
2146 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
|
2147 |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
2148 face = FACE_FROM_ID (it->f, face_id); |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
2149 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
|
2150 it->multibyte_p); |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2151 font = face->font; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2152 if (font == NULL) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2153 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2154 font = FRAME_FONT (it->f); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2155 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
|
2156 font_info = NULL; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2157 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2158 else |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2159 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2160 font_info |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2161 = 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
|
2162 boff = font_info->baseline_offset; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2163 if (font_info->vertical_centering) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2164 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
|
2165 } |
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 pcm = x_per_char_metric (font, &char2b); |
28793
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2168 if (pcm) |
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2169 { |
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2170 width = pcm->width; |
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2171 ascent = pcm->ascent; |
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2172 descent = pcm->descent; |
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2173 } |
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2174 else |
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2175 { |
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2176 width = FONT_WIDTH (font); |
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2177 ascent = font->ascent; |
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2178 descent = font->descent; |
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2179 } |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2180 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2181 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
|
2182 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2183 /* Relative composition with or without |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2184 alternate chars. */ |
28793
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2185 left = (leftmost + rightmost - width) / 2; |
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2186 btm = - descent + boff; |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2187 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
|
2188 && (! 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
|
2189 || NILP (Faref (Vignore_relative_composition, |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2190 make_number (ch))))) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2191 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2192 |
28793
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2193 if (- descent >= font_info->relative_compose) |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2194 /* 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
|
2195 btm = highest + 1; |
28793
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2196 else if (ascent <= 0) |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2197 /* One extra pixel between two glyphs. */ |
28793
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2198 btm = lowest - 1 - ascent - descent; |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2199 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2200 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2201 else |
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 /* 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
|
2204 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
|
2205 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
|
2206 specified by numbers as below: |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2207 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2208 0---1---2 -- ascent |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2209 | | |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2210 | | |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2211 | | |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2212 9--10--11 -- center |
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 ---3---4---5--- baseline |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2215 | | |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2216 6---7---8 -- descent |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2217 */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2218 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
|
2219 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
|
2220 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2221 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
|
2222 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
|
2223 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
|
2224 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2225 left = (leftmost |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2226 + grefx * (rightmost - leftmost) / 2 |
28793
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2227 - nrefx * width / 2); |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2228 btm = ((grefy == 0 ? highest |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2229 : grefy == 1 ? 0 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2230 : grefy == 2 ? lowest |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2231 : (highest + lowest) / 2) |
28793
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2232 - (nrefy == 0 ? ascent + descent |
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2233 : nrefy == 1 ? descent - boff |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2234 : nrefy == 2 ? 0 |
28793
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2235 : (ascent + descent) / 2)); |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2236 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2237 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2238 cmp->offsets[i * 2] = left; |
28793
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2239 cmp->offsets[i * 2 + 1] = btm + descent; |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2240 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2241 /* Update the bounding box of the overall glyphs. */ |
28793
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2242 right = left + width; |
e56af637f7a2
(x_produce_glyphs) <composite chars>: Handle case
Gerd Moellmann <gerd@gnu.org>
parents:
28785
diff
changeset
|
2243 top = btm + descent + ascent; |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2244 if (left < leftmost) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2245 leftmost = left; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2246 if (right > rightmost) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2247 rightmost = right; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2248 if (top > highest) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2249 highest = top; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2250 if (btm < lowest) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2251 lowest = btm; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2252 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2253 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2254 /* 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
|
2255 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
|
2256 non-negative. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2257 if (leftmost < 0) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2258 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2259 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
|
2260 cmp->offsets[i * 2] -= leftmost; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2261 rightmost -= leftmost; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2262 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2263 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2264 cmp->pixel_width = rightmost; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2265 cmp->ascent = highest; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2266 cmp->descent = - lowest; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2267 if (cmp->ascent < font_ascent) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2268 cmp->ascent = font_ascent; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2269 if (cmp->descent < font_descent) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2270 cmp->descent = font_descent; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2271 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2272 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2273 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
|
2274 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
|
2275 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
|
2276 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2277 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
|
2278 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2279 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
|
2280 it->ascent += thick; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2281 it->descent += thick; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2282 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2283 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
|
2284 it->pixel_width += thick; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2285 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
|
2286 it->pixel_width += thick; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2287 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2288 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2289 /* 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
|
2290 (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
|
2291 if (face->overline_p) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2292 it->ascent += 2; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2293 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2294 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
|
2295 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2296 if (it->glyph_row) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2297 x_append_composite_glyph (it); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2298 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2299 else if (it->what == IT_IMAGE) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2300 x_produce_image_glyph (it); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2301 else if (it->what == IT_STRETCH) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2302 x_produce_stretch_glyph (it); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2303 |
29458
679888a29324
(x_produce_glyphs): Don't xassert `it->descent > 0';
Gerd Moellmann <gerd@gnu.org>
parents:
29435
diff
changeset
|
2304 /* Accumulate dimensions. Note: can't assume that it->descent > 0 |
679888a29324
(x_produce_glyphs): Don't xassert `it->descent > 0';
Gerd Moellmann <gerd@gnu.org>
parents:
29435
diff
changeset
|
2305 because this isn't true for images with `:ascent 100'. */ |
679888a29324
(x_produce_glyphs): Don't xassert `it->descent > 0';
Gerd Moellmann <gerd@gnu.org>
parents:
29435
diff
changeset
|
2306 xassert (it->ascent >= 0 && it->descent >= 0); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2307 if (it->area == TEXT_AREA) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2308 it->current_x += it->pixel_width; |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2309 |
28686
b02f0d91b5aa
(x_produce_glyphs): Remove reference to struct it's
Gerd Moellmann <gerd@gnu.org>
parents:
28629
diff
changeset
|
2310 it->descent += it->extra_line_spacing; |
b02f0d91b5aa
(x_produce_glyphs): Remove reference to struct it's
Gerd Moellmann <gerd@gnu.org>
parents:
28629
diff
changeset
|
2311 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2312 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
|
2313 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
|
2314 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
|
2315 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
|
2316 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2317 |
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 /* 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
|
2320 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
|
2321 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2322 int |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2323 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
|
2324 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2325 enum face_id face_id; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2326 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2327 int height = 1; |
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 /* 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
|
2330 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
|
2331 if (FRAME_FACE_CACHE (f)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2332 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2333 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
|
2334 if (face) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2335 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
|
2336 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2337 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2338 return height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2339 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2340 |
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 /*********************************************************************** |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2343 Glyph display |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2344 ***********************************************************************/ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2345 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2346 /* 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
|
2347 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2348 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
|
2349 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
|
2350 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
|
2351 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
|
2352 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2353 struct glyph_string |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2354 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2355 /* X-origin of the string. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2356 int x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2357 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2358 /* 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
|
2359 int y, ybase; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2360 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2361 /* 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
|
2362 int width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2363 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2364 /* 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
|
2365 int background_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2366 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2367 /* 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
|
2368 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
|
2369 font the string is drawn in. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2370 int height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2371 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2372 /* 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
|
2373 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
|
2374 -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
|
2375 int left_overhang; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2376 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2377 /* 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
|
2378 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
|
2379 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
|
2380 int right_overhang; |
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 /* 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
|
2383 struct frame *f; |
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 /* 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
|
2386 struct window *w; |
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 /* X display and window for convenience. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2389 Display *display; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2390 Window window; |
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 /* 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
|
2393 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
|
2394 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2395 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2396 /* The area within row. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2397 enum glyph_row_area area; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2398 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2399 /* 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
|
2400 XChar2b *char2b; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2401 int nchars; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2402 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2403 /* 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
|
2404 enum draw_glyphs_face hl; |
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 /* 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
|
2407 struct face *face; |
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 /* 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
|
2410 XFontStruct *font; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2411 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2412 /* Font info for this string. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2413 struct font_info *font_info; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2414 |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2415 /* 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
|
2416 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
|
2417 struct composition *cmp; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2418 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2419 /* 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
|
2420 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
|
2421 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
|
2422 int gidx; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2423 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2424 /* 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
|
2425 of the window's drawing area. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2426 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
|
2427 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2428 /* 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
|
2429 unsigned background_filled_p : 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2430 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2431 /* 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
|
2432 unsigned two_byte_p : 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2433 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2434 /* 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
|
2435 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
|
2436 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
|
2437 unsigned font_not_found_p : 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2438 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2439 /* 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
|
2440 stipple pattern. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2441 unsigned stippled_p : 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2442 |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2443 /* 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
|
2444 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
|
2445 string appears in as clip rect. */ |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2446 unsigned for_overlaps_p : 1; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2447 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2448 /* 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
|
2449 GC gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2450 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2451 /* 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
|
2452 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
|
2453 font_not_found_p is 1. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2454 struct glyph *first_glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2455 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2456 /* Image, if any. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2457 struct image *img; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2458 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2459 struct glyph_string *next, *prev; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2460 }; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2461 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2462 |
25716
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
2463 #if 0 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2464 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2465 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2466 x_dump_glyph_string (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2467 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2468 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2469 fprintf (stderr, "glyph string\n"); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2470 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
|
2471 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
|
2472 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
|
2473 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
|
2474 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
|
2475 s->left_overhang, s->right_overhang); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2476 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
|
2477 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
|
2478 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
|
2479 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
|
2480 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
|
2481 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2482 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2483 #endif /* GLYPH_DEBUG */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2484 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2485 |
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 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
|
2488 struct glyph_string **, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2489 struct glyph_string *, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2490 struct glyph_string *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2491 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
|
2492 struct glyph_string **, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2493 struct glyph_string *, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2494 struct glyph_string *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2495 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
|
2496 struct glyph_string **, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2497 struct glyph_string *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2498 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
|
2499 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
|
2500 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
|
2501 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
|
2502 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
|
2503 int)); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2504 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
|
2505 XChar2b *, struct window *, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2506 struct glyph_row *, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2507 enum glyph_row_area, int, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2508 enum draw_glyphs_face)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2509 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
|
2510 enum glyph_row_area, int, int, |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2511 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
|
2512 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
|
2513 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
|
2514 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
|
2515 int)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2516 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
|
2517 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
|
2518 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
|
2519 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
|
2520 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
|
2521 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
|
2522 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
|
2523 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
|
2524 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
|
2525 int *, int *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2526 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
|
2527 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
|
2528 unsigned long *, double, int)); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2529 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
|
2530 double, int, unsigned long)); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2531 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
|
2532 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
|
2533 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
|
2534 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
|
2535 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
|
2536 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
|
2537 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
|
2538 int, int, int)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2539 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
|
2540 int, int, int, int, XRectangle *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2541 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
|
2542 int, int, int, XRectangle *)); |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2543 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
|
2544 enum glyph_row_area)); |
30137
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
2545 static int x_fill_stretch_glyph_string P_ ((struct glyph_string *, |
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
2546 struct glyph_row *, |
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
2547 enum glyph_row_area, int, int)); |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2548 |
29619
d171b4754825
(x_check_font) [GLYPH_DEBUG]: Add prototype.
Gerd Moellmann <gerd@gnu.org>
parents:
29600
diff
changeset
|
2549 #if GLYPH_DEBUG |
d171b4754825
(x_check_font) [GLYPH_DEBUG]: Add prototype.
Gerd Moellmann <gerd@gnu.org>
parents:
29600
diff
changeset
|
2550 static void x_check_font P_ ((struct frame *, XFontStruct *)); |
d171b4754825
(x_check_font) [GLYPH_DEBUG]: Add prototype.
Gerd Moellmann <gerd@gnu.org>
parents:
29600
diff
changeset
|
2551 #endif |
d171b4754825
(x_check_font) [GLYPH_DEBUG]: Add prototype.
Gerd Moellmann <gerd@gnu.org>
parents:
29600
diff
changeset
|
2552 |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2553 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2554 /* 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
|
2555 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
|
2556 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2557 static INLINE void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2558 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
|
2559 struct glyph_string **head, **tail; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2560 struct glyph_string *h, *t; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2561 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2562 if (h) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2563 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2564 if (*head) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2565 (*tail)->next = h; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2566 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2567 *head = h; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2568 h->prev = *tail; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2569 *tail = t; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2570 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2571 } |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2574 /* 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
|
2575 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
|
2576 result. */ |
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 static INLINE void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2579 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
|
2580 struct glyph_string **head, **tail; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2581 struct glyph_string *h, *t; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2582 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2583 if (h) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2584 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2585 if (*head) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2586 (*head)->prev = t; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2587 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2588 *tail = t; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2589 t->next = *head; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2590 *head = h; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2591 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2592 } |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2595 /* 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
|
2596 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
|
2597 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2598 static INLINE void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2599 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
|
2600 struct glyph_string **head, **tail; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2601 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2602 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2603 s->next = s->prev = NULL; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2604 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
|
2605 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2606 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2607 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2608 /* 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
|
2609 face. */ |
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 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2612 x_set_cursor_gc (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2613 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2614 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2615 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
|
2616 && 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
|
2617 && 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
|
2618 && !s->cmp) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2619 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
|
2620 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2621 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2622 /* 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
|
2623 XGCValues xgcv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2624 unsigned long mask; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2625 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2626 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
|
2627 xgcv.foreground = s->face->background; |
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 /* 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
|
2630 if (xgcv.foreground == xgcv.background) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2631 xgcv.foreground = s->face->foreground; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2632 if (xgcv.foreground == xgcv.background) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2633 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
|
2634 if (xgcv.foreground == xgcv.background) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2635 xgcv.foreground = s->face->foreground; |
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 /* 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
|
2638 if (xgcv.background == s->face->background |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2639 && xgcv.foreground == s->face->foreground) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2640 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2641 xgcv.background = s->face->foreground; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2642 xgcv.foreground = s->face->background; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2643 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2644 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2645 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
|
2646 xgcv.font = s->font->fid; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2647 xgcv.graphics_exposures = False; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2648 mask = GCForeground | GCBackground | GCFont | GCGraphicsExposures; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2649 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2650 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
|
2651 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
|
2652 mask, &xgcv); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2653 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2654 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
|
2655 = 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
|
2656 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2657 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
|
2658 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2659 } |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2662 /* 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
|
2663 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2664 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2665 x_set_mouse_face_gc (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2666 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2667 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2668 int face_id; |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
2669 struct face *face; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2670 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2671 /* 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
|
2672 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
|
2673 face = FACE_FROM_ID (s->f, face_id); |
29393
3ad9354ade23
(x_set_mouse_face_gc): If first glyph isn't a character
Gerd Moellmann <gerd@gnu.org>
parents:
28793
diff
changeset
|
2674 if (s->first_glyph->type == CHAR_GLYPH) |
3ad9354ade23
(x_set_mouse_face_gc): If first glyph isn't a character
Gerd Moellmann <gerd@gnu.org>
parents:
28793
diff
changeset
|
2675 face_id = FACE_FOR_CHAR (s->f, face, s->first_glyph->u.ch); |
3ad9354ade23
(x_set_mouse_face_gc): If first glyph isn't a character
Gerd Moellmann <gerd@gnu.org>
parents:
28793
diff
changeset
|
2676 else |
3ad9354ade23
(x_set_mouse_face_gc): If first glyph isn't a character
Gerd Moellmann <gerd@gnu.org>
parents:
28793
diff
changeset
|
2677 face_id = FACE_FOR_CHAR (s->f, face, 0); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2678 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
|
2679 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
|
2680 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2681 /* 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
|
2682 if (s->font == s->face->font) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2683 s->gc = s->face->gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2684 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2685 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2686 /* 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
|
2687 but font FONT. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2688 XGCValues xgcv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2689 unsigned long mask; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2690 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2691 xgcv.background = s->face->background; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2692 xgcv.foreground = s->face->foreground; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2693 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
|
2694 xgcv.font = s->font->fid; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2695 xgcv.graphics_exposures = False; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2696 mask = GCForeground | GCBackground | GCFont | GCGraphicsExposures; |
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_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
|
2699 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
|
2700 mask, &xgcv); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2701 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2702 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
|
2703 = 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
|
2704 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2705 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
|
2706 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2707 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2708 xassert (s->gc != 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2709 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2710 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2711 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2712 /* 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
|
2713 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
|
2714 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
|
2715 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2716 static INLINE void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2717 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
|
2718 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2719 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2720 s->gc = s->face->gc; |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2723 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2724 /* 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
|
2725 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
|
2726 pattern. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2727 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2728 static INLINE void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2729 x_set_glyph_string_gc (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2730 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2731 { |
30137
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
2732 PREPARE_FACE_FOR_DISPLAY (s->f, s->face); |
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
2733 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2734 if (s->hl == DRAW_NORMAL_TEXT) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2735 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2736 s->gc = s->face->gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2737 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
|
2738 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2739 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
|
2740 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2741 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
|
2742 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
|
2743 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2744 else if (s->hl == DRAW_CURSOR) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2745 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2746 x_set_cursor_gc (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2747 s->stippled_p = 0; |
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 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
|
2750 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2751 x_set_mouse_face_gc (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2752 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
|
2753 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2754 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
|
2755 || s->hl == DRAW_IMAGE_SUNKEN) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2756 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2757 s->gc = s->face->gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2758 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
|
2759 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2760 else |
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 s->gc = s->face->gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2763 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
|
2764 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2765 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2766 /* GC must have been set. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2767 xassert (s->gc != 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2768 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2769 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2770 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2771 /* 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
|
2772 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2773 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2774 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
|
2775 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2776 XRectangle *r; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2777 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2778 if (s->row->full_width_p) |
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 /* 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
|
2781 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
|
2782 |
3a09aae52441
(x_get_glyph_string_clip_rect): Take internal border
Gerd Moellmann <gerd@gnu.org>
parents:
25068
diff
changeset
|
2783 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
|
2784 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
|
2785 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2786 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
|
2787 { |
25079
3a09aae52441
(x_get_glyph_string_clip_rect): Take internal border
Gerd Moellmann <gerd@gnu.org>
parents:
25068
diff
changeset
|
2788 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
|
2789 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
|
2790 r->x -= width; |
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 |
25083
d3b7d7d2bca8
(x_setup_relief_color): Don't try smart color allocation
Gerd Moellmann <gerd@gnu.org>
parents:
25079
diff
changeset
|
2793 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
|
2794 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2795 /* 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
|
2796 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
|
2797 if (s->w->pseudo_window_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2798 r->height = s->row->visible_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2799 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2800 r->height = s->height; |
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 /* 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
|
2805 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
|
2806 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
|
2807 r->height = s->row->visible_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2808 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2809 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2810 /* 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
|
2811 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
|
2812 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
|
2813 if (!s->row->full_width_p |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2814 && MATRIX_ROW_PARTIALLY_VISIBLE_AT_TOP_P (s->w, s->row)) |
25546 | 2815 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
|
2816 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2817 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
|
2818 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
2819 /* 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
|
2820 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
|
2821 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
|
2822 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
|
2823 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2824 /* 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
|
2825 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
|
2826 intentionally draws over other lines. */ |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2827 if (s->for_overlaps_p) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2828 { |
25546 | 2829 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
|
2830 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
|
2831 } |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2832 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2833 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
|
2834 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2835 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2836 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2837 /* 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
|
2838 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
|
2839 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2840 static INLINE void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2841 x_set_glyph_string_clipping (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2842 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2843 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2844 XRectangle r; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2845 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
|
2846 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
|
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 /* 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
|
2851 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
|
2852 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2853 static INLINE void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2854 x_compute_glyph_string_overhangs (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2855 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2856 { |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2857 if (s->cmp == NULL |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2858 && s->first_glyph->type == CHAR_GLYPH) |
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 XCharStruct cs; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2861 int direction, font_ascent, font_descent; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2862 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
|
2863 &font_ascent, &font_descent, &cs); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2864 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
|
2865 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
|
2866 } |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2869 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2870 /* 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
|
2871 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
|
2872 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
|
2873 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2874 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2875 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
|
2876 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2877 int x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2878 int backward_p; |
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 if (backward_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2881 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2882 while (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 x_compute_glyph_string_overhangs (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2885 x -= s->width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2886 s->x = x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2887 s = s->prev; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2888 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2889 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2890 else |
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 while (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2893 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2894 x_compute_glyph_string_overhangs (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2895 s->x = x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2896 x += s->width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2897 s = s->next; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2898 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2899 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2900 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2901 |
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 /* 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
|
2904 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
|
2905 assumed to be zero. */ |
24991
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 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2908 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
|
2909 struct glyph *glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2910 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2911 int *left, *right; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2912 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2913 *left = *right = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2914 |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
2915 if (glyph->type == CHAR_GLYPH) |
24991
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 XFontStruct *font; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2918 struct face *face; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2919 struct font_info *font_info; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2920 XChar2b char2b; |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
2921 XCharStruct *pcm; |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
2922 |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
2923 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
|
2924 font = face->font; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2925 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
|
2926 if (font |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
2927 && (pcm = x_per_char_metric (font, &char2b))) |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
2928 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2929 if (pcm->rbearing > pcm->width) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2930 *right = pcm->rbearing - pcm->width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2931 if (pcm->lbearing < 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2932 *left = -pcm->lbearing; |
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 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2935 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2936 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2937 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2938 /* 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
|
2939 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
|
2940 if no glyphs are overwritten. */ |
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 static int |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2943 x_left_overwritten (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2944 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2945 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2946 int k; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2947 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2948 if (s->left_overhang) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2949 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2950 int x = 0, i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2951 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
|
2952 int first = s->first_glyph - glyphs; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2953 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2954 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
|
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 k = i + 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2958 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2959 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2960 k = -1; |
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 return k; |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2965 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2966 /* 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
|
2967 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
|
2968 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
|
2969 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2970 static int |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2971 x_left_overwriting (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2972 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2973 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2974 int i, k, x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2975 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
|
2976 int first = s->first_glyph - glyphs; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2977 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2978 k = -1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2979 x = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2980 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
|
2981 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2982 int left, right; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2983 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
|
2984 if (x + right > 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2985 k = i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2986 x -= glyphs[i].pixel_width; |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2989 return k; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2990 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2991 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2992 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2993 /* 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
|
2994 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
|
2995 no such glyph is found. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2996 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2997 static int |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2998 x_right_overwritten (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2999 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3000 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3001 int k = -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 if (s->right_overhang) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3004 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3005 int x = 0, i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3006 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
|
3007 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
|
3008 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
|
3009 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3010 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
|
3011 x += glyphs[i].pixel_width; |
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 k = i; |
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 return k; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3017 } |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3020 /* 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
|
3021 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
|
3022 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
|
3023 |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
3024 static int |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3025 x_right_overwriting (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3026 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3027 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3028 int i, k, x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3029 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
|
3030 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
|
3031 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
|
3032 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3033 k = -1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3034 x = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3035 for (i = first; i < end; ++i) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3036 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3037 int left, right; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3038 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
|
3039 if (x - left < 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3040 k = i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3041 x += glyphs[i].pixel_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3042 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3043 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3044 return k; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3045 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3046 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3047 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3048 /* 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
|
3049 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3050 static INLINE void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3051 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
|
3052 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3053 int x, y, w, h; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3054 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3055 XGCValues xgcv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3056 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
|
3057 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
|
3058 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
|
3059 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
|
3060 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3061 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3062 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3063 /* 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
|
3064 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
|
3065 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
|
3066 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
|
3067 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
|
3068 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3069 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3070 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
|
3071 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3072 int force_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3073 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3074 /* 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
|
3075 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
|
3076 if (!s->background_filled_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3077 { |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3078 if (s->stippled_p) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3079 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3080 /* Fill background with a stipple pattern. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3081 XSetFillStyle (s->display, s->gc, FillOpaqueStippled); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3082 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
|
3083 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
|
3084 s->background_width, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3085 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
|
3086 XSetFillStyle (s->display, s->gc, FillSolid); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3087 s->background_filled_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3088 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3089 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
|
3090 || s->font_not_found_p |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3091 || 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
|
3092 || force_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3093 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3094 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
|
3095 s->background_width, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3096 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
|
3097 s->background_filled_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3098 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3099 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3100 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3101 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3102 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3103 /* 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
|
3104 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3105 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3106 x_draw_glyph_string_foreground (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3107 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3108 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3109 int i, x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3110 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3111 /* 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
|
3112 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
|
3113 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
|
3114 && 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
|
3115 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
|
3116 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3117 x = s->x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3118 |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3119 /* 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
|
3120 loaded. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3121 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
|
3122 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3123 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
|
3124 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3125 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
|
3126 XDrawRectangle (s->display, s->window, |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3127 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
|
3128 s->height - 1); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3129 x += g->pixel_width; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3130 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3131 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3132 else |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3133 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3134 char *char1b = (char *) s->char2b; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3135 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
|
3136 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3137 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
|
3138 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
|
3139 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3140 /* 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
|
3141 if (!s->two_byte_p) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3142 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
|
3143 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
|
3144 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3145 /* 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
|
3146 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
|
3147 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
|
3148 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
|
3149 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
|
3150 if (s->for_overlaps_p |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3151 || (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
|
3152 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3153 /* 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
|
3154 if (s->two_byte_p) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3155 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
|
3156 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
|
3157 else |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3158 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
|
3159 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
|
3160 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3161 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3162 { |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3163 if (s->two_byte_p) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3164 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
|
3165 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
|
3166 else |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3167 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
|
3168 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
|
3169 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3170 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3171 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3172 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3173 /* 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
|
3174 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3175 static void |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3176 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
|
3177 struct glyph_string *s; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3178 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3179 int i, x; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3180 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3181 /* 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
|
3182 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
|
3183 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
|
3184 && 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
|
3185 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
|
3186 else |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3187 x = s->x; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3188 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3189 /* 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
|
3190 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
|
3191 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
|
3192 this composition. */ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3193 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3194 /* 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
|
3195 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
|
3196 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
|
3197 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3198 if (s->gidx == 0) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3199 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
|
3200 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
|
3201 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3202 else |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3203 { |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
3204 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
|
3205 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
|
3206 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
|
3207 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
|
3208 s->char2b + i, 1); |
24991
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 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3211 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3212 |
25529
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3213 #ifdef USE_X_TOOLKIT |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3214 |
29600
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3215 static struct frame *x_frame_of_widget P_ ((Widget)); |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3216 |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3217 |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3218 /* Return the frame on which widget WIDGET is used.. Abort if frame |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3219 cannot be determined. */ |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3220 |
29749
4235764941b5
(x_frame_of_widget): Add `static' to declaration (for pcc).
Dave Love <fx@gnu.org>
parents:
29744
diff
changeset
|
3221 static struct frame * |
29600
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3222 x_frame_of_widget (widget) |
25529
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3223 Widget widget; |
29600
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3224 { |
25529
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3225 struct x_display_info *dpyinfo; |
25716
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
3226 Lisp_Object tail; |
29600
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3227 struct frame *f; |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3228 |
25529
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3229 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
|
3230 |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3231 /* 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
|
3232 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
|
3233 (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
|
3234 x_any_window_to_frame. */ |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3235 while (!XtIsTopLevelShell (widget)) |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3236 widget = XtParent (widget); |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3237 |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3238 /* 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
|
3239 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
|
3240 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
|
3241 if (GC_FRAMEP (XCAR (tail)) |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3242 && (f = XFRAME (XCAR (tail)), |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3243 (f->output_data.nothing != 1 |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3244 && FRAME_X_DISPLAY_INFO (f) == dpyinfo)) |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3245 && f->output_data.x->widget == widget) |
29600
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3246 return f; |
25529
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3247 |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3248 abort (); |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3249 } |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3250 |
29600
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3251 |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3252 /* Allocate the color COLOR->pixel on the screen and display of |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3253 widget WIDGET in colormap CMAP. If an exact match cannot be |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3254 allocated, try the nearest color available. Value is non-zero |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3255 if successful. This is called from lwlib. */ |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3256 |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3257 int |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3258 x_alloc_nearest_color_for_widget (widget, cmap, color) |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3259 Widget widget; |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3260 Colormap cmap; |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3261 XColor *color; |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3262 { |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3263 struct frame *f = x_frame_of_widget (widget); |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3264 return x_alloc_nearest_color (f, cmap, color); |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3265 } |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3266 |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3267 |
31340
6b2ed557e09c
(x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents:
31011
diff
changeset
|
3268 /* Allocate a color which is lighter or darker than *PIXEL by FACTOR |
6b2ed557e09c
(x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents:
31011
diff
changeset
|
3269 or DELTA. Try a color with RGB values multiplied by FACTOR first. |
6b2ed557e09c
(x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents:
31011
diff
changeset
|
3270 If this produces the same color as PIXEL, try a color where all RGB |
6b2ed557e09c
(x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents:
31011
diff
changeset
|
3271 values have DELTA added. Return the allocated color in *PIXEL. |
6b2ed557e09c
(x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents:
31011
diff
changeset
|
3272 DISPLAY is the X display, CMAP is the colormap to operate on. |
6b2ed557e09c
(x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents:
31011
diff
changeset
|
3273 Value is non-zero if successful. */ |
6b2ed557e09c
(x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents:
31011
diff
changeset
|
3274 |
6b2ed557e09c
(x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents:
31011
diff
changeset
|
3275 int |
6b2ed557e09c
(x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents:
31011
diff
changeset
|
3276 x_alloc_lighter_color_for_widget (widget, display, cmap, pixel, factor, delta) |
6b2ed557e09c
(x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents:
31011
diff
changeset
|
3277 Widget widget; |
6b2ed557e09c
(x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents:
31011
diff
changeset
|
3278 Display *display; |
6b2ed557e09c
(x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents:
31011
diff
changeset
|
3279 Colormap cmap; |
6b2ed557e09c
(x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents:
31011
diff
changeset
|
3280 unsigned long *pixel; |
6b2ed557e09c
(x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents:
31011
diff
changeset
|
3281 double factor; |
6b2ed557e09c
(x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents:
31011
diff
changeset
|
3282 int delta; |
6b2ed557e09c
(x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents:
31011
diff
changeset
|
3283 { |
6b2ed557e09c
(x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents:
31011
diff
changeset
|
3284 struct frame *f = x_frame_of_widget (widget); |
6b2ed557e09c
(x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents:
31011
diff
changeset
|
3285 return x_alloc_lighter_color (f, display, cmap, pixel, factor, delta); |
6b2ed557e09c
(x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents:
31011
diff
changeset
|
3286 } |
6b2ed557e09c
(x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents:
31011
diff
changeset
|
3287 |
6b2ed557e09c
(x_alloc_lighter_color_for_widget): New function.
Miles Bader <miles@gnu.org>
parents:
31011
diff
changeset
|
3288 |
25529
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3289 #endif /* USE_X_TOOLKIT */ |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3290 |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3291 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3292 /* 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
|
3293 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
|
3294 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
|
3295 color allocated. */ |
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 int |
25529
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3298 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
|
3299 struct frame *f; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3300 Colormap cmap; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3301 XColor *color; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3302 { |
25529
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3303 Display *display = FRAME_X_DISPLAY (f); |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3304 Screen *screen = FRAME_X_SCREEN (f); |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3305 int rc; |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3306 |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3307 gamma_correct (f, color); |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3308 rc = XAllocColor (display, cmap, color); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3309 if (rc == 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3310 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3311 /* 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
|
3312 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
|
3313 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
|
3314 color matching with StaticColor visuals. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3315 int nearest, i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3316 unsigned long nearest_delta = ~0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3317 int ncells = XDisplayCells (display, XScreenNumberOfScreen (screen)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3318 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
|
3319 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3320 for (i = 0; i < ncells; ++i) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3321 cells[i].pixel = i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3322 XQueryColors (display, cmap, cells, ncells); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3323 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3324 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
|
3325 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3326 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
|
3327 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
|
3328 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
|
3329 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
|
3330 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3331 if (delta < nearest_delta) |
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 nearest = i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3334 nearest_delta = delta; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3335 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3336 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3337 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3338 color->red = cells[nearest].red; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3339 color->green = cells[nearest].green; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3340 color->blue = cells[nearest].blue; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3341 rc = XAllocColor (display, cmap, color); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3342 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3343 |
28356
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3344 #ifdef DEBUG_X_COLORS |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3345 if (rc) |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3346 register_color (color->pixel); |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3347 #endif /* DEBUG_X_COLORS */ |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3348 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3349 return rc; |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3352 |
28356
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3353 /* 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
|
3354 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
|
3355 get color reference counts right. */ |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3356 |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3357 unsigned long |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3358 x_copy_color (f, pixel) |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3359 struct frame *f; |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3360 unsigned long pixel; |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3361 { |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3362 XColor color; |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3363 |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3364 color.pixel = pixel; |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3365 BLOCK_INPUT; |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3366 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
|
3367 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
|
3368 UNBLOCK_INPUT; |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3369 #ifdef DEBUG_X_COLORS |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3370 register_color (pixel); |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3371 #endif |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3372 return color.pixel; |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3373 } |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3374 |
c94ec7e56746
(x_copy_color): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
28321
diff
changeset
|
3375 |
29600
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3376 /* Allocate color PIXEL on display DPY. PIXEL must already be allocated. |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3377 It's necessary to do this instead of just using PIXEL directly to |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3378 get color reference counts right. */ |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3379 |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3380 unsigned long |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3381 x_copy_dpy_color (dpy, cmap, pixel) |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3382 Display *dpy; |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3383 Colormap cmap; |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3384 unsigned long pixel; |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3385 { |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3386 XColor color; |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3387 |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3388 color.pixel = pixel; |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3389 BLOCK_INPUT; |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3390 XQueryColor (dpy, cmap, &color); |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3391 XAllocColor (dpy, cmap, &color); |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3392 UNBLOCK_INPUT; |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3393 #ifdef DEBUG_X_COLORS |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3394 register_color (pixel); |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3395 #endif |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3396 return color.pixel; |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3397 } |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3398 |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
3399 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3400 /* 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
|
3401 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
|
3402 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
|
3403 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
|
3404 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
|
3405 Value is non-zero if successful. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3406 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3407 static int |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3408 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
|
3409 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3410 Display *display; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3411 Colormap cmap; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3412 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
|
3413 double factor; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3414 int delta; |
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 XColor color, new; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3417 int success_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3418 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3419 /* Get RGB color values. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3420 color.pixel = *pixel; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3421 XQueryColor (display, cmap, &color); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3422 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3423 /* 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
|
3424 xassert (factor >= 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3425 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
|
3426 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
|
3427 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
|
3428 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3429 /* Try to allocate the color. */ |
25529
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3430 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
|
3431 if (success_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3432 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3433 if (new.pixel == *pixel) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3434 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3435 /* 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
|
3436 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
|
3437 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
|
3438 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3439 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
|
3440 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
|
3441 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
|
3442 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
|
3443 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3444 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3445 success_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3446 *pixel = new.pixel; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3447 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3448 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3449 return success_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3450 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3451 |
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 /* 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
|
3454 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
|
3455 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
|
3456 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
|
3457 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
|
3458 be allocated, use DEFAULT_PIXEL, instead. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3459 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3460 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3461 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
|
3462 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3463 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
|
3464 double factor; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3465 int delta; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3466 unsigned long default_pixel; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3467 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3468 XGCValues xgcv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3469 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
|
3470 unsigned long mask = GCForeground | GCLineWidth | GCGraphicsExposures; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3471 unsigned long pixel; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3472 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
|
3473 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
|
3474 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
|
3475 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
|
3476 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3477 xgcv.graphics_exposures = False; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3478 xgcv.line_width = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3479 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3480 /* 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
|
3481 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
|
3482 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
|
3483 if (relief->gc |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3484 && relief->allocated_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3485 { |
27962
048184bb751e
(x_alloc_lighter_color, x_setup_relief_color): Use
Gerd Moellmann <gerd@gnu.org>
parents:
27857
diff
changeset
|
3486 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
|
3487 relief->allocated_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3488 } |
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 /* Allocate new color. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3491 xgcv.foreground = default_pixel; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3492 pixel = background; |
25091
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
3493 if (dpyinfo->n_planes != 1 |
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
3494 && 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
|
3495 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3496 relief->allocated_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3497 xgcv.foreground = relief->pixel = pixel; |
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 if (relief->gc == 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3501 { |
25091
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
3502 xgcv.stipple = dpyinfo->gray; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3503 mask |= GCStipple; |
25091
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
3504 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
|
3505 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3506 else |
25091
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
3507 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
|
3508 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3509 |
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 /* 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
|
3512 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3513 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3514 x_setup_relief_colors (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3515 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3516 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3517 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
|
3518 unsigned long color; |
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 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
|
3521 color = s->face->box_color; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3522 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3523 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3524 XGCValues xgcv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3525 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3526 /* 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
|
3527 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
|
3528 color = xgcv.background; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3529 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3530 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3531 if (di->white_relief.gc == 0 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3532 || color != di->relief_background) |
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 di->relief_background = color; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3535 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
|
3536 WHITE_PIX_DEFAULT (s->f)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3537 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
|
3538 BLACK_PIX_DEFAULT (s->f)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3539 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3540 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3541 |
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 /* 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
|
3544 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
|
3545 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
|
3546 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
|
3547 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
|
3548 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
|
3549 when drawing. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3550 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3551 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3552 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
|
3553 raised_p, left_p, right_p, clip_rect) |
771 | 3554 struct frame *f; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3555 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
|
3556 XRectangle *clip_rect; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3557 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3558 int i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3559 GC gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3560 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3561 if (raised_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3562 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
|
3563 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3564 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
|
3565 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
|
3566 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3567 /* Top. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3568 for (i = 0; i < width; ++i) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3569 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
|
3570 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
|
3571 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
|
3572 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3573 /* Left. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3574 if (left_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3575 for (i = 0; i < width; ++i) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3576 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
|
3577 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
|
3578 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3579 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
|
3580 if (raised_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3581 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
|
3582 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3583 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
|
3584 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
|
3585 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3586 /* Bottom. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3587 for (i = 0; i < width; ++i) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3588 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
|
3589 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
|
3590 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
|
3591 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3592 /* Right. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3593 if (right_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3594 for (i = 0; i < width; ++i) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3595 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
|
3596 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
|
3597 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3598 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
|
3599 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3600 |
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 /* 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
|
3603 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
|
3604 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
|
3605 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
|
3606 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
|
3607 rectangle to use when drawing. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3608 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3609 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3610 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
|
3611 left_p, right_p, clip_rect) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3612 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3613 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
|
3614 XRectangle *clip_rect; |
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 XGCValues xgcv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3617 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3618 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
|
3619 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
|
3620 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
|
3621 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3622 /* Top. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3623 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
|
3624 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
|
3625 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3626 /* Left. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3627 if (left_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3628 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
|
3629 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
|
3630 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3631 /* Bottom. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3632 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
|
3633 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
|
3634 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3635 /* Right. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3636 if (right_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3637 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
|
3638 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
|
3639 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3640 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
|
3641 XSetClipMask (s->display, s->gc, None); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3642 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3643 |
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 /* 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
|
3646 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3647 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3648 x_draw_glyph_string_box (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3649 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3650 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3651 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
|
3652 int left_p, right_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3653 struct glyph *last_glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3654 XRectangle clip_rect; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3655 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3656 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
|
3657 if (s->row->full_width_p |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3658 && !s->w->pseudo_window_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3659 { |
25465 | 3660 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
|
3661 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
|
3662 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
|
3663 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3664 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3665 /* 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
|
3666 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
|
3667 ? s->first_glyph |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3668 : s->first_glyph + s->nchars - 1); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3669 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3670 width = s->face->box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3671 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
|
3672 left_x = s->x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3673 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
|
3674 ? last_x - 1 |
25302
0f10c1eaf8fb
(x_draw_glyph_string_box): Use the background width
Gerd Moellmann <gerd@gnu.org>
parents:
25269
diff
changeset
|
3675 : 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
|
3676 top_y = s->y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3677 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
|
3678 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3679 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
|
3680 || (s->hl == DRAW_MOUSE_FACE |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3681 && (s->prev == NULL |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3682 || s->prev->hl != s->hl))); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3683 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
|
3684 || (s->hl == DRAW_MOUSE_FACE |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3685 && (s->next == NULL |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3686 || s->next->hl != s->hl))); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3687 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3688 x_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
|
3689 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3690 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
|
3691 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
|
3692 left_p, right_p, &clip_rect); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3693 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3694 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3695 x_setup_relief_colors (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3696 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
|
3697 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
|
3698 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3699 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3700 |
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 /* 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
|
3703 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3704 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3705 x_draw_image_foreground (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3706 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3707 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3708 int x; |
28785
796eafcfc070
(x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents:
28686
diff
changeset
|
3709 int y = s->ybase - image_ascent (s->img, s->face); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3710 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3711 /* 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
|
3712 right of that line. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3713 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
|
3714 && 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
|
3715 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
|
3716 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3717 x = s->x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3718 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3719 /* 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
|
3720 by that margin. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3721 if (s->img->margin) |
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 x += s->img->margin; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3724 y += s->img->margin; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3725 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3726 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3727 if (s->img->pixmap) |
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 if (s->img->mask) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3730 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3731 /* 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
|
3732 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
|
3733 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
|
3734 (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
|
3735 manually. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3736 unsigned long mask = (GCClipMask | GCClipXOrigin | GCClipYOrigin |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3737 | GCFunction); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3738 XGCValues xgcv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3739 XRectangle clip_rect, image_rect, r; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3740 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3741 xgcv.clip_mask = s->img->mask; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3742 xgcv.clip_x_origin = x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3743 xgcv.clip_y_origin = y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3744 xgcv.function = GXcopy; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3745 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
|
3746 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3747 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
|
3748 image_rect.x = x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3749 image_rect.y = y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3750 image_rect.width = s->img->width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3751 image_rect.height = s->img->height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3752 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
|
3753 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
|
3754 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
|
3755 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3756 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3757 { |
30653
319c3bad8ada
(x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents:
30371
diff
changeset
|
3758 unsigned long mask = GCClipXOrigin | GCClipYOrigin | GCFunction; |
319c3bad8ada
(x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents:
30371
diff
changeset
|
3759 XGCValues xgcv; |
319c3bad8ada
(x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents:
30371
diff
changeset
|
3760 XRectangle clip_rect, image_rect, r; |
319c3bad8ada
(x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents:
30371
diff
changeset
|
3761 |
319c3bad8ada
(x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents:
30371
diff
changeset
|
3762 x_get_glyph_string_clip_rect (s, &clip_rect); |
319c3bad8ada
(x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents:
30371
diff
changeset
|
3763 image_rect.x = x; |
319c3bad8ada
(x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents:
30371
diff
changeset
|
3764 image_rect.y = y; |
319c3bad8ada
(x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents:
30371
diff
changeset
|
3765 image_rect.width = s->img->width; |
319c3bad8ada
(x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents:
30371
diff
changeset
|
3766 image_rect.height = s->img->height; |
319c3bad8ada
(x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents:
30371
diff
changeset
|
3767 if (x_intersect_rectangles (&clip_rect, &image_rect, &r)) |
319c3bad8ada
(x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents:
30371
diff
changeset
|
3768 XCopyArea (s->display, s->img->pixmap, s->window, s->gc, |
319c3bad8ada
(x_draw_image_foreground): Avoid drawing outside
Gerd Moellmann <gerd@gnu.org>
parents:
30371
diff
changeset
|
3769 r.x - x, r.y - y, r.width, r.height, r.x, r.y); |
24991
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 /* 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
|
3772 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
|
3773 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
|
3774 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
|
3775 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
|
3776 nothing here for mouse-face. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3777 if (s->hl == DRAW_CURSOR) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3778 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
|
3779 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
|
3780 } |
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 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3783 /* 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
|
3784 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
|
3785 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
|
3786 } |
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 /* 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
|
3790 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3791 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3792 x_draw_image_relief (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3793 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3794 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3795 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
|
3796 XRectangle r; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3797 int x; |
28785
796eafcfc070
(x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents:
28686
diff
changeset
|
3798 int y = s->ybase - image_ascent (s->img, s->face); |
24991
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 /* 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
|
3801 right of that line. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3802 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
|
3803 && 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
|
3804 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
|
3805 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3806 x = s->x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3807 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3808 /* 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
|
3809 by that margin. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3810 if (s->img->margin) |
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 x += s->img->margin; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3813 y += s->img->margin; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3814 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3815 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3816 if (s->hl == DRAW_IMAGE_SUNKEN |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3817 || s->hl == DRAW_IMAGE_RAISED) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3818 { |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
3819 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
|
3820 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
|
3821 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3822 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3823 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3824 thick = abs (s->img->relief); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3825 raised_p = s->img->relief > 0; |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3828 x0 = x - thick; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3829 y0 = y - thick; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3830 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
|
3831 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
|
3832 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3833 x_setup_relief_colors (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3834 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
|
3835 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
|
3836 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3837 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3838 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3839 /* 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
|
3840 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3841 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3842 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
|
3843 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3844 Pixmap pixmap; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3845 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3846 int x; |
28785
796eafcfc070
(x_produce_image_glyph, x_draw_image_foreground)
Gerd Moellmann <gerd@gnu.org>
parents:
28686
diff
changeset
|
3847 int y = s->ybase - s->y - image_ascent (s->img, s->face); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3848 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3849 /* 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
|
3850 right of that line. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3851 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
|
3852 && 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
|
3853 x = s->face->box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3854 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3855 x = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3856 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3857 /* 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
|
3858 by that margin. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3859 if (s->img->margin) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3860 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3861 x += s->img->margin; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3862 y += s->img->margin; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3863 } |
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 if (s->img->pixmap) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3866 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3867 if (s->img->mask) |
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 /* 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
|
3870 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
|
3871 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
|
3872 (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
|
3873 manually. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3874 unsigned long mask = (GCClipMask | GCClipXOrigin | GCClipYOrigin |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3875 | GCFunction); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3876 XGCValues xgcv; |
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 xgcv.clip_mask = s->img->mask; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3879 xgcv.clip_x_origin = x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3880 xgcv.clip_y_origin = y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3881 xgcv.function = GXcopy; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3882 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
|
3883 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3884 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
|
3885 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
|
3886 XSetClipMask (s->display, s->gc, None); |
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 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3889 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3890 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
|
3891 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
|
3892 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3893 /* 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
|
3894 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
|
3895 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
|
3896 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
|
3897 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
|
3898 nothing here for mouse-face. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3899 if (s->hl == DRAW_CURSOR) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3900 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
|
3901 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
|
3902 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3903 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3904 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3905 /* 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
|
3906 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
|
3907 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
|
3908 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3909 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3910 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3911 /* 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
|
3912 give the rectangle to draw. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3913 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3914 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3915 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
|
3916 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3917 int x, y, w, h; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3918 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3919 if (s->stippled_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3920 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3921 /* Fill background with a stipple pattern. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3922 XSetFillStyle (s->display, s->gc, FillOpaqueStippled); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3923 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
|
3924 XSetFillStyle (s->display, s->gc, FillSolid); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3925 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3926 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3927 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
|
3928 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3929 |
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 /* Draw image glyph string S. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3932 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3933 s->y |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3934 s->x +------------------------- |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3935 | s->face->box |
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 | +------------------------- |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3938 | | s->img->margin |
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 | | | the image |
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 */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3944 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3945 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3946 x_draw_image_glyph_string (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3947 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3948 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3949 int x, y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3950 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
|
3951 int margin = s->img->margin; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3952 int height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3953 Pixmap pixmap = None; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3954 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3955 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
|
3956 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3957 /* 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
|
3958 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
|
3959 flickering. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3960 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
|
3961 if (height > s->img->height |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3962 || margin |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3963 || s->img->mask |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3964 || s->img->pixmap == 0 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3965 || s->width != s->background_width) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3966 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3967 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
|
3968 x = s->x + box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3969 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3970 x = s->x; |
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 y = s->y + box_line_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3973 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3974 if (s->img->mask) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3975 { |
31694
97c48afc4c5a
(x_draw_image_glyph_string): Remove a comment describing
Gerd Moellmann <gerd@gnu.org>
parents:
31614
diff
changeset
|
3976 /* Create a pixmap as large as the glyph string. Fill it |
97c48afc4c5a
(x_draw_image_glyph_string): Remove a comment describing
Gerd Moellmann <gerd@gnu.org>
parents:
31614
diff
changeset
|
3977 with the background color. Copy the image to it, using |
97c48afc4c5a
(x_draw_image_glyph_string): Remove a comment describing
Gerd Moellmann <gerd@gnu.org>
parents:
31614
diff
changeset
|
3978 its mask. Copy the temporary pixmap to the display. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3979 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
|
3980 int depth = DefaultDepthOfScreen (screen); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3981 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3982 /* 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
|
3983 pixmap = XCreatePixmap (s->display, s->window, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3984 s->background_width, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3985 s->height, depth); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3986 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3987 /* 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
|
3988 pixmap. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3989 XSetClipMask (s->display, s->gc, None); |
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 /* 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
|
3992 if (s->stippled_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3993 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3994 /* Fill background with a stipple pattern. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3995 XSetFillStyle (s->display, s->gc, FillOpaqueStippled); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3996 XFillRectangle (s->display, pixmap, s->gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3997 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
|
3998 XSetFillStyle (s->display, s->gc, FillSolid); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3999 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4000 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4001 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4002 XGCValues xgcv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4003 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
|
4004 &xgcv); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4005 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
|
4006 XFillRectangle (s->display, pixmap, s->gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4007 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
|
4008 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
|
4009 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4010 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4011 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4012 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
|
4013 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4014 s->background_filled_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4015 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4016 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4017 /* Draw the foreground. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4018 if (pixmap != None) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4019 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4020 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
|
4021 x_set_glyph_string_clipping (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4022 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
|
4023 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
|
4024 XFreePixmap (s->display, pixmap); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4025 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4026 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4027 x_draw_image_foreground (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4028 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4029 /* 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
|
4030 if (s->img->relief |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4031 || s->hl == DRAW_IMAGE_RAISED |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4032 || s->hl == DRAW_IMAGE_SUNKEN) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4033 x_draw_image_relief (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4034 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4035 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4036 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4037 /* Draw stretch glyph string S. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4038 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4039 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4040 x_draw_stretch_glyph_string (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4041 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4042 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4043 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
|
4044 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
|
4045 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4046 if (s->hl == DRAW_CURSOR |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4047 && !x_stretch_cursor_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4048 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4049 /* 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
|
4050 as wide as the stretch glyph. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4051 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
|
4052 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4053 /* Draw cursor. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4054 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
|
4055 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4056 /* 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
|
4057 if (width < s->background_width) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4058 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4059 GC gc = s->face->gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4060 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
|
4061 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
|
4062 XRectangle r; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4063 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4064 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
|
4065 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
|
4066 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4067 if (s->face->stipple) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4068 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4069 /* Fill background with a stipple pattern. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4070 XSetFillStyle (s->display, gc, FillOpaqueStippled); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4071 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
|
4072 XSetFillStyle (s->display, gc, FillSolid); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4073 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4074 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4075 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4076 XGCValues xgcv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4077 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
|
4078 XSetForeground (s->display, gc, xgcv.background); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4079 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
|
4080 XSetForeground (s->display, gc, xgcv.foreground); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4081 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4082 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4083 } |
313 | 4084 else |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4085 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
|
4086 s->height); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4087 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4088 s->background_filled_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4089 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4090 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4091 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4092 /* Draw glyph string S. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4093 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4094 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4095 x_draw_glyph_string (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4096 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4097 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4098 /* 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
|
4099 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
|
4100 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
|
4101 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
|
4102 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4103 xassert (s->next->img == NULL); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4104 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
|
4105 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
|
4106 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
|
4107 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4108 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4109 /* 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
|
4110 x_set_glyph_string_gc (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4111 x_set_glyph_string_clipping (s); |
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 switch (s->first_glyph->type) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4114 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4115 case IMAGE_GLYPH: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4116 x_draw_image_glyph_string (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4117 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4118 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4119 case STRETCH_GLYPH: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4120 x_draw_stretch_glyph_string (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4121 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4122 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4123 case CHAR_GLYPH: |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4124 if (s->for_overlaps_p) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4125 s->background_filled_p = 1; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4126 else |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4127 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
|
4128 x_draw_glyph_string_foreground (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4129 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4130 |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4131 case COMPOSITE_GLYPH: |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4132 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
|
4133 s->background_filled_p = 1; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4134 else |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4135 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
|
4136 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
|
4137 break; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4138 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4139 default: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4140 abort (); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4141 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4142 |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4143 if (!s->for_overlaps_p) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4144 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4145 /* Draw underline. */ |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4146 if (s->face->underline_p) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4147 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4148 unsigned long dy, h; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4149 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4150 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
|
4151 h = 1; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4152 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
|
4153 dy = s->height - h; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4154 |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4155 if (s->face->underline_defaulted_p) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4156 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
|
4157 s->width, h); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4158 else |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4159 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4160 XGCValues xgcv; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4161 XGetGCValues (s->display, s->gc, GCForeground, &xgcv); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4162 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
|
4163 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
|
4164 s->width, h); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4165 XSetForeground (s->display, s->gc, xgcv.foreground); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4166 } |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4167 } |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4168 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4169 /* Draw overline. */ |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4170 if (s->face->overline_p) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4171 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4172 unsigned long dy = 0, h = 1; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4173 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4174 if (s->face->overline_color_defaulted_p) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4175 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
|
4176 s->width, h); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4177 else |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4178 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4179 XGCValues xgcv; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4180 XGetGCValues (s->display, s->gc, GCForeground, &xgcv); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4181 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
|
4182 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
|
4183 s->width, h); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4184 XSetForeground (s->display, s->gc, xgcv.foreground); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4185 } |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4186 } |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4187 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4188 /* Draw strike-through. */ |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4189 if (s->face->strike_through_p) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4190 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4191 unsigned long h = 1; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4192 unsigned long dy = (s->height - h) / 2; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4193 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4194 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
|
4195 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
|
4196 s->width, h); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4197 else |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4198 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4199 XGCValues xgcv; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4200 XGetGCValues (s->display, s->gc, GCForeground, &xgcv); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4201 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
|
4202 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
|
4203 s->width, h); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4204 XSetForeground (s->display, s->gc, xgcv.foreground); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4205 } |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4206 } |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4207 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4208 /* Draw relief. */ |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4209 if (s->face->box != FACE_NO_BOX) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4210 x_draw_glyph_string_box (s); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4211 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4212 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4213 /* Reset clipping. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4214 XSetClipMask (s->display, s->gc, None); |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4217 |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4218 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
|
4219 struct face **, int)); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4220 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4221 |
30137
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4222 /* Fill glyph string S with composition components specified by S->cmp. |
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4223 |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4224 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
|
4225 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
|
4226 OVERLAPS_P non-zero means S should draw the foreground only, and |
30137
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4227 use its physical height for clipping. |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4228 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4229 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
|
4230 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4231 static int |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4232 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
|
4233 struct glyph_string *s; |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4234 struct face **faces; |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4235 int overlaps_p; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4236 { |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4237 int i; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4238 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4239 xassert (s); |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4240 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4241 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
|
4242 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4243 s->face = faces[s->gidx]; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4244 s->font = s->face->font; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4245 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
|
4246 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4247 /* 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
|
4248 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
|
4249 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
|
4250 ++s->nchars; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4251 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
|
4252 ++s->nchars; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4253 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4254 /* 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
|
4255 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
|
4256 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4257 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
|
4258 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4259 /* 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
|
4260 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
|
4261 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
|
4262 characters of the glyph string. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4263 if (s->font == NULL) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4264 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4265 s->font_not_found_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4266 s->font = FRAME_FONT (s->f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4267 } |
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 /* 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
|
4270 s->ybase += s->first_glyph->voffset; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4271 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4272 xassert (s->face && s->face->gc); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4273 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4274 /* 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
|
4275 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
|
4276 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4277 return s->gidx + s->nchars; |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4278 } |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4279 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4280 |
30137
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4281 /* Fill glyph string S from a sequence of character glyphs. |
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4282 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4283 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
|
4284 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
|
4285 OVERLAPS_P non-zero means S should draw the foreground only, and |
30137
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4286 use its physical height for clipping. |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4287 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4288 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
|
4289 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4290 static int |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4291 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
|
4292 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4293 int face_id; |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4294 int start, end, overlaps_p; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4295 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4296 struct glyph *glyph, *last; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4297 int voffset; |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
4298 int glyph_not_available_p; |
24991
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 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
|
4301 xassert (s->nchars == 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4302 xassert (start >= 0 && end > start); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4303 |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4304 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
|
4305 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
|
4306 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
|
4307 voffset = glyph->voffset; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4308 |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
4309 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
|
4310 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4311 while (glyph < last |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4312 && glyph->type == CHAR_GLYPH |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4313 && glyph->voffset == voffset |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
4314 /* Same face id implies same font, nowadays. */ |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
4315 && glyph->face_id == face_id |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
4316 && 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
|
4317 { |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
4318 int two_byte_p; |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
4319 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4320 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
|
4321 s->char2b + s->nchars, |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
4322 &two_byte_p); |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
4323 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
|
4324 ++s->nchars; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4325 xassert (s->nchars <= end - start); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4326 s->width += glyph->pixel_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4327 ++glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4328 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4329 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4330 s->font = s->face->font; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4331 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
|
4332 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4333 /* 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
|
4334 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
|
4335 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
|
4336 characters of the glyph string. */ |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
4337 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
|
4338 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4339 s->font_not_found_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4340 s->font = FRAME_FONT (s->f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4341 } |
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 /* 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
|
4344 s->ybase += voffset; |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4345 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4346 xassert (s->face && s->face->gc); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4347 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
|
4348 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4349 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4350 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4351 /* 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
|
4352 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4353 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4354 x_fill_image_glyph_string (s) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4355 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4356 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4357 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
|
4358 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
|
4359 xassert (s->img); |
27000
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
4360 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
|
4361 s->font = s->face->font; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4362 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
|
4363 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4364 /* 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
|
4365 s->ybase += s->first_glyph->voffset; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4366 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4367 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4368 |
30137
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4369 /* Fill glyph string S from a sequence of stretch glyphs. |
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4370 |
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4371 ROW is the glyph row in which the glyphs are found, AREA is the |
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4372 area within the row. START is the index of the first glyph to |
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4373 consider, END is the index of the last + 1. |
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4374 |
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4375 Value is the index of the first glyph not in S. */ |
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4376 |
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4377 static int |
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4378 x_fill_stretch_glyph_string (s, row, area, start, end) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4379 struct glyph_string *s; |
30137
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4380 struct glyph_row *row; |
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4381 enum glyph_row_area area; |
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4382 int start, end; |
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4383 { |
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4384 struct glyph *glyph, *last; |
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4385 int voffset, face_id; |
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4386 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4387 xassert (s->first_glyph->type == STRETCH_GLYPH); |
30137
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4388 |
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4389 glyph = s->row->glyphs[s->area] + start; |
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4390 last = s->row->glyphs[s->area] + end; |
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4391 face_id = glyph->face_id; |
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4392 s->face = FACE_FROM_ID (s->f, face_id); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4393 s->font = s->face->font; |
30137
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4394 s->font_info = FONT_INFO_FROM_ID (s->f, s->face->font_info_id); |
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4395 s->width = glyph->pixel_width; |
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4396 voffset = glyph->voffset; |
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4397 |
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4398 for (++glyph; |
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4399 (glyph < last |
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4400 && glyph->type == STRETCH_GLYPH |
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4401 && glyph->voffset == voffset |
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4402 && glyph->face_id == face_id); |
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4403 ++glyph) |
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4404 s->width += glyph->pixel_width; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4405 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4406 /* Adjust base line for subscript/superscript text. */ |
30137
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4407 s->ybase += voffset; |
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4408 |
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4409 xassert (s->face && s->face->gc); |
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4410 return glyph - s->row->glyphs[s->area]; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4411 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4412 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4413 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4414 /* 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
|
4415 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
|
4416 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
|
4417 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
|
4418 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
|
4419 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
|
4420 face-override for drawing S. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4421 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4422 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4423 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
|
4424 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4425 XChar2b *char2b; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4426 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4427 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4428 enum glyph_row_area area; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4429 int start; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4430 enum draw_glyphs_face hl; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4431 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4432 bzero (s, sizeof *s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4433 s->w = w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4434 s->f = XFRAME (w->frame); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4435 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
|
4436 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
|
4437 s->char2b = char2b; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4438 s->hl = hl; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4439 s->row = row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4440 s->area = area; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4441 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
|
4442 s->height = row->height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4443 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
|
4444 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
4445 /* 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
|
4446 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
|
4447 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
|
4448 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4449 s->ybase = s->y + row->ascent; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4450 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4451 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4452 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4453 /* 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
|
4454 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
|
4455 in the drawing area. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4456 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4457 static INLINE void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4458 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
|
4459 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4460 int start; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4461 int last_x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4462 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4463 /* 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
|
4464 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
|
4465 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
|
4466 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4467 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
|
4468 && s->hl == DRAW_NORMAL_TEXT |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4469 && ((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
|
4470 || s->face->background != default_face->background |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4471 || s->face->stipple != default_face->stipple)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4472 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
|
4473 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4474 /* 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
|
4475 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
|
4476 area. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4477 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
|
4478 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
|
4479 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4480 s->background_width = s->width; |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4484 /* 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
|
4485 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
|
4486 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
|
4487 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
|
4488 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
|
4489 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
|
4490 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
|
4491 |
25692
121bd925411f
Don't continue #define args for benefit of old cc.
Dave Love <fx@gnu.org>
parents:
25682
diff
changeset
|
4492 /* 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
|
4493 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
|
4494 #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
|
4495 do \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4496 { \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4497 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
|
4498 x_init_glyph_string (s, NULL, W, ROW, AREA, START, HL); \ |
30137
4a3808257cf4
(x_fill_stretch_glyph_string): Consume runs of stretch
Gerd Moellmann <gerd@gnu.org>
parents:
30083
diff
changeset
|
4499 START = x_fill_stretch_glyph_string (s, ROW, AREA, START, END); \ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4500 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
|
4501 s->x = (X); \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4502 } \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4503 while (0) |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4506 /* 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
|
4507 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
|
4508 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
|
4509 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
|
4510 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
|
4511 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
|
4512 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
|
4513 |
25692
121bd925411f
Don't continue #define args for benefit of old cc.
Dave Love <fx@gnu.org>
parents:
25682
diff
changeset
|
4514 #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
|
4515 do \ |
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 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
|
4518 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
|
4519 x_fill_image_glyph_string (s); \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4520 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
|
4521 ++START; \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4522 s->x = (X); \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4523 } \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4524 while (0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4525 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4526 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4527 /* 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
|
4528 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
|
4529 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
|
4530 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
|
4531 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
|
4532 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
|
4533 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
|
4534 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
|
4535 |
25692
121bd925411f
Don't continue #define args for benefit of old cc.
Dave Love <fx@gnu.org>
parents:
25682
diff
changeset
|
4536 #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
|
4537 do \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4538 { \ |
29600
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
4539 int c, face_id; \ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4540 XChar2b *char2b; \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4541 \ |
27000
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
4542 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
|
4543 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
|
4544 \ |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4545 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
|
4546 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
|
4547 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
|
4548 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
|
4549 s->x = (X); \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4550 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
|
4551 OVERLAPS_P); \ |
24991
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 while (0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4554 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4555 |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4556 /* 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
|
4557 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
|
4558 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
|
4559 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
|
4560 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
|
4561 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
|
4562 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
|
4563 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
|
4564 |
26912
3470e4fea708
(BUILD_GLYPH_STRINGS): For pcc, remove continuation in arg list.
Dave Love <fx@gnu.org>
parents:
26879
diff
changeset
|
4565 #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
|
4566 do { \ |
27000
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
4567 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
|
4568 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
|
4569 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
|
4570 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
|
4571 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
|
4572 XChar2b *char2b; \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4573 struct face **faces; \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4574 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
|
4575 int n; \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4576 \ |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
4577 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
|
4578 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
|
4579 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
|
4580 /* 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
|
4581 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
|
4582 { \ |
27000
d7f15cd9c4ad
All codes adjusted for the change of struct glyph.
Kenichi Handa <handa@m17n.org>
parents:
26968
diff
changeset
|
4583 int c = COMPOSITION_GLYPH (cmp, n); \ |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
4584 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
|
4585 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
|
4586 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
|
4587 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
|
4588 } \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4589 \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4590 /* 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
|
4591 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
|
4592 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
|
4593 { \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4594 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
|
4595 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
|
4596 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
|
4597 s->cmp = cmp; \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4598 s->gidx = n; \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4599 s->x = (X); \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4600 \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4601 if (n == 0) \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4602 first_s = s; \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4603 \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4604 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
|
4605 } \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4606 \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4607 ++START; \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4608 s = first_s; \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4609 } while (0) |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4610 |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4611 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4612 /* 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
|
4613 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
|
4614 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
|
4615 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
|
4616 x-positions of the drawing area. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4617 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4618 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
|
4619 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
|
4620 asynchronously). */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4621 |
25692
121bd925411f
Don't continue #define args for benefit of old cc.
Dave Love <fx@gnu.org>
parents:
25682
diff
changeset
|
4622 #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
|
4623 do \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4624 { \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4625 HEAD = TAIL = NULL; \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4626 while (START < END) \ |
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 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
|
4629 switch (first_glyph->type) \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4630 { \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4631 case CHAR_GLYPH: \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4632 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
|
4633 TAIL, HL, X, LAST_X, \ |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4634 OVERLAPS_P); \ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4635 break; \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4636 \ |
26879
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4637 case COMPOSITE_GLYPH: \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4638 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
|
4639 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
|
4640 OVERLAPS_P); \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4641 break; \ |
b4de7fa9866e
(x_append_glyph): Setup members of struct glyph properly
Kenichi Handa <handa@m17n.org>
parents:
26829
diff
changeset
|
4642 \ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4643 case STRETCH_GLYPH: \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4644 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
|
4645 HEAD, TAIL, HL, X, LAST_X); \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4646 break; \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4647 \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4648 case IMAGE_GLYPH: \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4649 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
|
4650 TAIL, HL, X, LAST_X); \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4651 break; \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4652 \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4653 default: \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4654 abort (); \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4655 } \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4656 \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4657 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
|
4658 (X) += s->width; \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4659 } \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4660 } \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4661 while (0) |
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 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
|
4665 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
|
4666 face-override with the following meaning: |
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 DRAW_NORMAL_TEXT draw normally |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4669 DRAW_CURSOR draw in cursor face |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4670 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
|
4671 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
|
4672 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
|
4673 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
|
4674 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4675 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
|
4676 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
|
4677 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
|
4678 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
|
4679 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
|
4680 |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4681 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
|
4682 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
|
4683 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4684 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
|
4685 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4686 static int |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4687 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
|
4688 overlaps_p) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4689 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4690 int x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4691 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4692 enum glyph_row_area area; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4693 int start, end; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4694 enum draw_glyphs_face hl; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4695 int *real_start, *real_end; |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4696 int overlaps_p; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4697 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4698 struct glyph_string *head, *tail; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4699 struct glyph_string *s; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4700 int last_x, area_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4701 int x_reached; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4702 int i, j; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4703 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4704 /* Let's rather be paranoid than getting a SEGV. */ |
31489
8bfcf0b562f2
(x_draw_glyphs): Handle case START and END are out
Gerd Moellmann <gerd@gnu.org>
parents:
31340
diff
changeset
|
4705 end = min (end, row->used[area]); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4706 start = max (0, start); |
31489
8bfcf0b562f2
(x_draw_glyphs): Handle case START and END are out
Gerd Moellmann <gerd@gnu.org>
parents:
31340
diff
changeset
|
4707 start = min (end, start); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4708 if (real_start) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4709 *real_start = start; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4710 if (real_end) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4711 *real_end = end; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4712 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4713 /* 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
|
4714 end of the drawing area. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4715 if (row->full_width_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4716 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4717 /* 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
|
4718 or flag areas. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4719 struct frame *f = XFRAME (w->frame); |
25465 | 4720 /* 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
|
4721 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
|
4722 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4723 x += window_left_x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4724 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
|
4725 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
|
4726 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4727 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
|
4728 { |
25465 | 4729 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
|
4730 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
|
4731 last_x += width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4732 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4733 x -= width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4734 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4735 |
25083
d3b7d7d2bca8
(x_setup_relief_color): Don't try smart color allocation
Gerd Moellmann <gerd@gnu.org>
parents:
25079
diff
changeset
|
4736 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
|
4737 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
|
4738 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4739 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4740 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4741 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
|
4742 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
|
4743 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
|
4744 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4745 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4746 /* 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
|
4747 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
|
4748 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
|
4749 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
|
4750 i = start; |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4751 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
|
4752 overlaps_p); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4753 if (tail) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4754 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
|
4755 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4756 x_reached = x; |
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 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
|
4759 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
|
4760 strings built above. */ |
31489
8bfcf0b562f2
(x_draw_glyphs): Handle case START and END are out
Gerd Moellmann <gerd@gnu.org>
parents:
31340
diff
changeset
|
4761 if (head && !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
|
4762 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4763 int dummy_x = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4764 struct glyph_string *h, *t; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4765 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4766 /* Compute overhangs for all glyph strings. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4767 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
|
4768 x_compute_glyph_string_overhangs (s); |
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 /* 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
|
4771 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
|
4772 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
|
4773 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
|
4774 draws over it. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4775 i = x_left_overwritten (head); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4776 if (i >= 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4777 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4778 j = i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4779 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
|
4780 DRAW_NORMAL_TEXT, dummy_x, last_x, |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4781 overlaps_p); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4782 start = i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4783 if (real_start) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4784 *real_start = start; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4785 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
|
4786 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
|
4787 } |
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 /* 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
|
4790 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
|
4791 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
|
4792 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
|
4793 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
|
4794 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
|
4795 strings exist. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4796 i = x_left_overwriting (head); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4797 if (i >= 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4798 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4799 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
|
4800 DRAW_NORMAL_TEXT, dummy_x, last_x, |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4801 overlaps_p); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4802 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
|
4803 s->background_filled_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4804 if (real_start) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4805 *real_start = i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4806 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
|
4807 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
|
4808 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4809 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4810 /* 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
|
4811 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
|
4812 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
|
4813 over it. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4814 i = x_right_overwritten (tail); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4815 if (i >= 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4816 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4817 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
|
4818 DRAW_NORMAL_TEXT, x, last_x, |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4819 overlaps_p); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4820 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
|
4821 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
|
4822 if (real_end) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4823 *real_end = i; |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4826 /* 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
|
4827 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
|
4828 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
|
4829 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
|
4830 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
|
4831 i = x_right_overwriting (tail); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4832 if (i >= 0) |
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 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
|
4835 DRAW_NORMAL_TEXT, x, last_x, |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4836 overlaps_p); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4837 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
|
4838 s->background_filled_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4839 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
|
4840 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
|
4841 if (real_end) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4842 *real_end = i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4843 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4844 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4845 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4846 /* Draw all strings. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4847 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
|
4848 x_draw_glyph_string (s); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4849 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4850 /* 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
|
4851 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
|
4852 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
|
4853 if (!row->full_width_p) |
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 (area > LEFT_MARGIN_AREA) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4856 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
|
4857 if (area > TEXT_AREA) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4858 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
|
4859 } |
31489
8bfcf0b562f2
(x_draw_glyphs): Handle case START and END are out
Gerd Moellmann <gerd@gnu.org>
parents:
31340
diff
changeset
|
4860 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4861 return x_reached; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4862 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4863 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4864 |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4865 /* 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
|
4866 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4867 static void |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4868 x_fix_overlapping_area (w, row, area) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4869 struct window *w; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4870 struct glyph_row *row; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4871 enum glyph_row_area area; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4872 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4873 int i, x; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4874 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4875 BLOCK_INPUT; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4876 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4877 if (area == LEFT_MARGIN_AREA) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4878 x = 0; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4879 else if (area == TEXT_AREA) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4880 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
|
4881 else |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4882 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
|
4883 + window_box_width (w, TEXT_AREA)); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4884 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4885 for (i = 0; i < row->used[area];) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4886 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4887 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
|
4888 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4889 int start = i, start_x = x; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4890 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4891 do |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4892 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4893 x += row->glyphs[area][i].pixel_width; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4894 ++i; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4895 } |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4896 while (i < row->used[area] |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4897 && row->glyphs[area][i].overlaps_vertically_p); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4898 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4899 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
|
4900 (row->inverse_p |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4901 ? DRAW_INVERSE_VIDEO : DRAW_NORMAL_TEXT), |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4902 NULL, NULL, 1); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4903 } |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4904 else |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4905 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4906 x += row->glyphs[area][i].pixel_width; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4907 ++i; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4908 } |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4909 } |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4910 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4911 UNBLOCK_INPUT; |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4912 } |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4913 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4914 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4915 /* 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
|
4916 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
|
4917 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
|
4918 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
|
4919 row being updated. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4920 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4921 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4922 x_write_glyphs (start, len) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4923 struct glyph *start; |
286 | 4924 int len; |
4925 { | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4926 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
|
4927 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4928 xassert (updated_window && updated_row); |
286 | 4929 BLOCK_INPUT; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4930 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4931 /* Write glyphs. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4932 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4933 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
|
4934 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
|
4935 updated_row, updated_area, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4936 hpos, hpos + len, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4937 (updated_row->inverse_p |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4938 ? DRAW_INVERSE_VIDEO : DRAW_NORMAL_TEXT), |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4939 &real_start, &real_end, 0); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4940 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4941 /* 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
|
4942 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
|
4943 real_end - real_start); |
286 | 4944 |
4945 UNBLOCK_INPUT; | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4946 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4947 /* Advance the output cursor. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4948 output_cursor.hpos += len; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4949 output_cursor.x = x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4950 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4951 |
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 /* 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
|
4954 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4955 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4956 x_insert_glyphs (start, len) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4957 struct glyph *start; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4958 register int len; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4959 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4960 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4961 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4962 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
|
4963 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4964 struct glyph *glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4965 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
|
4966 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4967 xassert (updated_window && updated_row); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4968 BLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4969 w = updated_window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4970 f = XFRAME (WINDOW_FRAME (w)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4971 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4972 /* 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
|
4973 row = updated_row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4974 line_height = row->height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4975 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4976 /* 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
|
4977 shift_by_width = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4978 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
|
4979 shift_by_width += glyph->pixel_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4980 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4981 /* 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
|
4982 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
|
4983 - output_cursor.x |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4984 - shift_by_width); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4985 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4986 /* Shift right. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4987 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
|
4988 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
|
4989 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
|
4990 f->output_data.x->normal_gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4991 frame_x, frame_y, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4992 shifted_region_width, line_height, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4993 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
|
4994 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4995 /* Write the glyphs. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4996 hpos = start - row->glyphs[updated_area]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4997 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
|
4998 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
|
4999 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
|
5000 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5001 /* Advance the output cursor. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5002 output_cursor.hpos += len; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5003 output_cursor.x += shift_by_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5004 UNBLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5005 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5006 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5007 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5008 /* 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
|
5009 for X frames. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5010 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5011 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5012 x_delete_glyphs (n) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5013 register int n; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5014 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5015 abort (); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5016 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5017 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5018 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5019 /* 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
|
5020 (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
|
5021 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
|
5022 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5023 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
|
5024 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
|
5025 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5026 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5027 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
|
5028 int to_x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5029 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5030 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5031 struct window *w = updated_window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5032 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
|
5033 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
|
5034 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5035 xassert (updated_window && updated_row); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5036 f = XFRAME (w->frame); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5037 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5038 if (updated_row->full_width_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5039 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5040 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
|
5041 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
|
5042 && !w->pseudo_window_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5043 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
|
5044 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5045 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5046 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
|
5047 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
|
5048 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5049 /* 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
|
5050 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
|
5051 if (to_x == 0) |
286 | 5052 return; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5053 else if (to_x < 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5054 to_x = max_x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5055 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5056 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
|
5057 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5058 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
|
5059 |
429 | 5060 /* 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
|
5061 if (!updated_row->full_width_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5062 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
|
5063 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5064 from_x = output_cursor.x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5065 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5066 /* Translate to frame coordinates. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5067 if (updated_row->full_width_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5068 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5069 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
|
5070 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
|
5071 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5072 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5073 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5074 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
|
5075 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
|
5076 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5077 |
25546 | 5078 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
|
5079 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
|
5080 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
|
5081 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5082 /* 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
|
5083 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
|
5084 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5085 BLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5086 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
|
5087 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
|
5088 False); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5089 UNBLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5090 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5091 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5092 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5093 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5094 /* 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
|
5095 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
|
5096 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5097 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5098 x_clear_frame () |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5099 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5100 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5101 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5102 if (updating_frame) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5103 f = updating_frame; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5104 else |
25682
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5105 f = SELECTED_FRAME (); |
771 | 5106 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5107 /* 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
|
5108 longer visible. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5109 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
|
5110 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
|
5111 output_cursor.x = -1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5112 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5113 /* 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
|
5114 follow an explicit cursor_to. */ |
286 | 5115 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
|
5116 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
|
5117 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
5118 /* 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
|
5119 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
|
5120 x_scroll_bar_clear (f); |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5121 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5122 XFlush (FRAME_X_DISPLAY (f)); |
286 | 5123 UNBLOCK_INPUT; |
5124 } | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5125 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5126 |
6791
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
5127 |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5128 /* 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
|
5129 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5130 /* 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
|
5131 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
|
5132 |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5133 #if defined (HAVE_TIMEVAL) && defined (HAVE_SELECT) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5134 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5135 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5136 /* 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
|
5137 *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
|
5138 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5139 static int |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5140 timeval_subtract (result, x, y) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5141 struct timeval *result, x, y; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5142 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5143 /* 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
|
5144 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
|
5145 if (x.tv_usec < y.tv_usec) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5146 { |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5147 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
|
5148 y.tv_usec -= 1000000 * nsec; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5149 y.tv_sec += nsec; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5150 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5151 |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5152 if (x.tv_usec - y.tv_usec > 1000000) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5153 { |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5154 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
|
5155 y.tv_usec += 1000000 * nsec; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5156 y.tv_sec -= nsec; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5157 } |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5158 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5159 /* 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
|
5160 positive. */ |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5161 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
|
5162 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
|
5163 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5164 /* 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
|
5165 negative. */ |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5166 return x.tv_sec < y.tv_sec; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5167 } |
286 | 5168 |
21514 | 5169 void |
771 | 5170 XTflash (f) |
5171 struct frame *f; | |
286 | 5172 { |
5173 BLOCK_INPUT; | |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5174 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5175 { |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5176 GC gc; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5177 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5178 /* 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
|
5179 pixels into background pixels. */ |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5180 { |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5181 XGCValues values; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5182 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5183 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
|
5184 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
|
5185 ^ f->output_data.x->background_pixel); |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
5186 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5187 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
|
5188 GCFunction | GCForeground, &values); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5189 } |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5190 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5191 { |
16352
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5192 /* 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
|
5193 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
|
5194 /* 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
|
5195 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
|
5196 /* 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
|
5197 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
|
5198 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
|
5199 |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5200 int width; |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5201 |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5202 /* 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
|
5203 edge it is next to. */ |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5204 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
|
5205 { |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5206 case vertical_scroll_bar_left: |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5207 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
|
5208 break; |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5209 |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5210 case vertical_scroll_bar_right: |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5211 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
|
5212 break; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5213 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5214 default: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5215 break; |
16352
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5216 } |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5217 |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5218 width = flash_right - flash_left; |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5219 |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5220 /* 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
|
5221 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
|
5222 { |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5223 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
|
5224 flash_left, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5225 (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
|
5226 + 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
|
5227 width, flash_height); |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5228 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
|
5229 flash_left, |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5230 (height - flash_height |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5231 - FRAME_INTERNAL_BORDER_WIDTH (f)), |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5232 width, flash_height); |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5233 } |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5234 else |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5235 /* 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
|
5236 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
|
5237 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
|
5238 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
|
5239 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5240 x_flush (f); |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5241 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5242 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5243 struct timeval wakeup; |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5244 |
5362
d1fa597d923d
(XTflush): FIx typo in last change.
Richard M. Stallman <rms@gnu.org>
parents:
5357
diff
changeset
|
5245 EMACS_GET_TIME (wakeup); |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5246 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5247 /* 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
|
5248 wakeup.tv_usec += 150000; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5249 wakeup.tv_sec += (wakeup.tv_usec / 1000000); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5250 wakeup.tv_usec %= 1000000; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5251 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5252 /* Keep waiting until past the time wakeup. */ |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5253 while (1) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5254 { |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5255 struct timeval timeout; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5256 |
5362
d1fa597d923d
(XTflush): FIx typo in last change.
Richard M. Stallman <rms@gnu.org>
parents:
5357
diff
changeset
|
5257 EMACS_GET_TIME (timeout); |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5258 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5259 /* In effect, timeout = wakeup - timeout. |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5260 Break if result would be negative. */ |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5261 if (timeval_subtract (&timeout, wakeup, timeout)) |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5262 break; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5263 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5264 /* 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
|
5265 select (0, NULL, NULL, NULL, &timeout); |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5266 } |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5267 } |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
5268 |
16352
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5269 /* 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
|
5270 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
|
5271 { |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5272 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
|
5273 flash_left, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5274 (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
|
5275 + 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
|
5276 width, flash_height); |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5277 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
|
5278 flash_left, |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5279 (height - flash_height |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5280 - FRAME_INTERNAL_BORDER_WIDTH (f)), |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5281 width, flash_height); |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5282 } |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5283 else |
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
5284 /* 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
|
5285 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
|
5286 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
|
5287 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
|
5288 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5289 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
|
5290 x_flush (f); |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5291 } |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5292 } |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5293 |
286 | 5294 UNBLOCK_INPUT; |
5295 } | |
5296 | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5297 #endif /* defined (HAVE_TIMEVAL) && defined (HAVE_SELECT) */ |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5298 |
286 | 5299 |
5300 /* Make audible bell. */ | |
5301 | |
21514 | 5302 void |
286 | 5303 XTring_bell () |
5304 { | |
25682
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5305 struct frame *f = SELECTED_FRAME (); |
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5306 |
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5307 if (FRAME_X_DISPLAY (f)) |
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5308 { |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
5309 #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
|
5310 if (visible_bell) |
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5311 XTflash (f); |
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5312 else |
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5313 #endif |
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5314 { |
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5315 BLOCK_INPUT; |
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5316 XBell (FRAME_X_DISPLAY (f), 0); |
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5317 XFlush (FRAME_X_DISPLAY (f)); |
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5318 UNBLOCK_INPUT; |
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
5319 } |
286 | 5320 } |
5321 } | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5322 |
286 | 5323 |
5324 /* Specify how many text lines, from the top of the window, | |
5325 should be affected by insert-lines and delete-lines operations. | |
5326 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
|
5327 that is bounded by calls to x_update_begin and x_update_end. */ |
286 | 5328 |
21514 | 5329 static void |
286 | 5330 XTset_terminal_window (n) |
5331 register int n; | |
5332 { | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5333 /* This function intentionally left blank. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5334 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5335 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5336 |
286 | 5337 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5338 /*********************************************************************** |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5339 Line Dance |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5342 /* 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
|
5343 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
|
5344 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5345 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5346 x_ins_del_lines (vpos, n) |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
5347 int vpos, n; |
286 | 5348 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5349 abort (); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5350 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5351 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5352 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5353 /* 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
|
5354 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5355 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5356 x_scroll_run (w, run) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5357 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5358 struct run *run; |
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 struct frame *f = XFRAME (w->frame); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5361 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
|
5362 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5363 /* 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
|
5364 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
|
5365 left and right of W. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5366 window_box (w, -1, &x, &y, &width, &height); |
25465 | 5367 width += FRAME_X_FLAGS_AREA_WIDTH (f); |
5368 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
|
5369 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5370 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
|
5371 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
|
5372 bottom_y = y + height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5373 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5374 if (to_y < from_y) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5375 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5376 /* 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
|
5377 line at the bottom. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5378 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
|
5379 height = bottom_y - from_y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5380 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5381 height = run->height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5382 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5383 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5384 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5385 /* 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
|
5386 at the bottom. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5387 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
|
5388 height = bottom_y - to_y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5389 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5390 height = run->height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5391 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5392 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5393 BLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5394 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5395 /* 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
|
5396 updated_window = w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5397 x_clear_cursor (w); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5398 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5399 XCopyArea (FRAME_X_DISPLAY (f), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5400 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
|
5401 f->output_data.x->normal_gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5402 x, from_y, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5403 width, height, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5404 x, to_y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5405 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5406 UNBLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5407 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5408 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5409 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5410 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5411 /*********************************************************************** |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5412 Exposure Events |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5413 ***********************************************************************/ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5414 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5415 /* 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
|
5416 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
|
5417 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
|
5418 the entire frame. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5419 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5420 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5421 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
|
5422 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5423 int x, y, w, h; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5424 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5425 XRectangle r; |
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 TRACE ((stderr, "expose_frame ")); |
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 /* 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
|
5430 if (FRAME_GARBAGED_P (f)) |
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 TRACE ((stderr, " garbaged\n")); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5433 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5434 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5435 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5436 /* 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
|
5437 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
|
5438 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
|
5439 if (FRAME_FACE_CACHE (f) == NULL |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5440 || 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
|
5441 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5442 TRACE ((stderr, " no faces\n")); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5443 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5444 } |
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 (w == 0 || h == 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5447 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5448 r.x = r.y = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5449 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
|
5450 r.height = CANON_Y_UNIT (f) * f->height; |
286 | 5451 } |
5452 else | |
5453 { | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5454 r.x = x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5455 r.y = y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5456 r.width = w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5457 r.height = h; |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5460 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
|
5461 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
|
5462 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
5463 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
|
5464 { |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
5465 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
|
5466 XRectangle window_rect; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5467 XRectangle intersection_rect; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5468 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
|
5469 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5470 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5471 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
|
5472 window_rect.x = window_x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5473 window_rect.y = window_y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5474 window_rect.width = window_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5475 window_rect.height = window_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5476 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5477 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
|
5478 expose_window (w, &intersection_rect); |
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 #ifndef USE_X_TOOLKIT |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5482 if (WINDOWP (f->menu_bar_window)) |
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 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
|
5485 XRectangle window_rect; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5486 XRectangle intersection_rect; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5487 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
|
5488 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5489 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5490 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
|
5491 window_rect.x = window_x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5492 window_rect.y = window_y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5493 window_rect.width = window_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5494 window_rect.height = window_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5495 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5496 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
|
5497 expose_window (w, &intersection_rect); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5498 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5499 #endif /* not USE_X_TOOLKIT */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5500 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5501 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5502 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5503 /* 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
|
5504 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
|
5505 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5506 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5507 expose_window_tree (w, r) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5508 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5509 XRectangle *r; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5510 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5511 while (w) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5512 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5513 if (!NILP (w->hchild)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5514 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
|
5515 else if (!NILP (w->vchild)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5516 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
|
5517 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5518 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5519 XRectangle window_rect; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5520 XRectangle intersection_rect; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5521 struct frame *f = XFRAME (w->frame); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5522 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
|
5523 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5524 /* Frame-relative pixel rectangle of W. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5525 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
|
5526 &window_height); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5527 window_rect.x |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5528 = (window_x |
25465 | 5529 - 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
|
5530 - 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
|
5531 window_rect.y = window_y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5532 window_rect.width |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5533 = (window_width |
25465 | 5534 + 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
|
5535 + 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
|
5536 window_rect.height |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5537 = 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
|
5538 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5539 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
|
5540 expose_window (w, &intersection_rect); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5541 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5542 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5543 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
|
5544 } |
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 |
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 /* 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
|
5549 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
|
5550 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5551 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5552 expose_area (w, row, r, area) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5553 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5554 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5555 XRectangle *r; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5556 enum glyph_row_area area; |
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 int x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5559 struct glyph *first = row->glyphs[area]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5560 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
|
5561 struct glyph *last; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5562 int first_x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5563 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5564 /* 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
|
5565 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
|
5566 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
|
5567 if (area == LEFT_MARGIN_AREA) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5568 x = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5569 else if (area == TEXT_AREA) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5570 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
|
5571 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5572 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
|
5573 + window_box_width (w, TEXT_AREA)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5574 |
25306
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5575 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
|
5576 /* 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
|
5577 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
|
5578 0, row->used[area], |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5579 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
|
5580 NULL, NULL, 0); |
25306
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5581 else |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5582 { |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5583 /* 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
|
5584 while (first < end |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5585 && 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
|
5586 { |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5587 x += first->pixel_width; |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5588 ++first; |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5589 } |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5590 |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5591 /* Find the last one. */ |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5592 last = first; |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5593 first_x = x; |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5594 while (last < end |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5595 && 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
|
5596 { |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5597 x += last->pixel_width; |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5598 ++last; |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5599 } |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5600 |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5601 /* Repaint. */ |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5602 if (last > first) |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5603 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
|
5604 first - row->glyphs[area], |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5605 last - row->glyphs[area], |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5606 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
|
5607 NULL, NULL, 0); |
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5608 } |
24991
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 /* 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
|
5613 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
|
5614 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5615 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5616 expose_line (w, row, r) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5617 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5618 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5619 XRectangle *r; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5620 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5621 xassert (row->enabled_p); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5622 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5623 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
|
5624 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
|
5625 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
|
5626 NULL, NULL, 0); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5627 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5628 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5629 if (row->used[LEFT_MARGIN_AREA]) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5630 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
|
5631 if (row->used[TEXT_AREA]) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5632 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
|
5633 if (row->used[RIGHT_MARGIN_AREA]) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5634 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
|
5635 x_draw_row_bitmaps (w, row); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5636 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5637 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5638 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5639 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5640 /* 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
|
5641 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5642 static int |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5643 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
|
5644 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5645 XRectangle *r; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5646 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5647 XRectangle cr, result; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5648 struct glyph *cursor_glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5649 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5650 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
|
5651 if (cursor_glyph) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5652 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5653 cr.x = w->phys_cursor.x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5654 cr.y = w->phys_cursor.y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5655 cr.width = cursor_glyph->pixel_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5656 cr.height = w->phys_cursor_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5657 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
|
5658 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5659 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5660 return 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5661 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5662 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5663 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5664 /* 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
|
5665 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
|
5666 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5667 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5668 expose_window (w, r) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5669 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5670 XRectangle *r; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5671 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5672 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5673 int y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5674 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
|
5675 int cursor_cleared_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5676 |
25529
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
5677 /* 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
|
5678 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
|
5679 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
|
5680 created window. */ |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
5681 if (w->current_matrix == NULL) |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
5682 return; |
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
5683 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5684 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
|
5685 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
|
5686 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5687 /* Convert to window coordinates. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5688 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
|
5689 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
|
5690 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5691 /* Turn off the cursor. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5692 if (!w->pseudo_window_p |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5693 && 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
|
5694 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5695 x_clear_cursor (w); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5696 cursor_cleared_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5697 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5698 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5699 cursor_cleared_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5700 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5701 /* 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
|
5702 row = w->current_matrix->rows; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5703 y = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5704 while (row->enabled_p |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5705 && y < yb |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5706 && y + row->height < r->y) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5707 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5708 y += row->height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5709 ++row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5710 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5711 |
286 | 5712 /* 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
|
5713 while (row->enabled_p |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5714 && y < yb |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5715 && y < r->y + r->height) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5716 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5717 expose_line (w, row, r); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5718 y += row->height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5719 ++row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5720 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5721 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5722 /* 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
|
5723 if (WINDOW_WANTS_MODELINE_P (w) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5724 && (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
|
5725 row->enabled_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5726 && row->y < r->y + r->height) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5727 expose_line (w, row, r); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5728 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5729 if (!w->pseudo_window_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5730 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5731 /* Draw border between windows. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5732 x_draw_vertical_border (w); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5733 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5734 /* Turn the cursor on again. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5735 if (cursor_cleared_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5736 x_update_window_cursor (w, 1); |
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 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5739 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5740 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5741 /* 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
|
5742 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
|
5743 empty. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5744 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5745 static int |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5746 x_intersect_rectangles (r1, r2, result) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5747 XRectangle *r1, *r2, *result; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5748 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5749 XRectangle *left, *right; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5750 XRectangle *upper, *lower; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5751 int intersection_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5752 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5753 /* 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
|
5754 if (r1->x < r2->x) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5755 left = r1, right = r2; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5756 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5757 left = r2, right = r1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5758 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5759 /* 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
|
5760 otherwise there is no intersection. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5761 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
|
5762 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5763 result->x = right->x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5764 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5765 /* 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
|
5766 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
|
5767 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
|
5768 - result->x); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5769 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5770 /* Same game for Y. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5771 if (r1->y < r2->y) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5772 upper = r1, lower = r2; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5773 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5774 upper = r2, lower = r1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5775 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5776 /* 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
|
5777 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
|
5778 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
|
5779 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5780 result->y = lower->y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5781 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5782 /* 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
|
5783 ends of upper and lower. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5784 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
|
5785 upper->y + upper->height) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5786 - result->y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5787 intersection_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5788 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5789 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5790 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5791 return intersection_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5792 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5793 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5794 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5795 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5796 |
286 | 5797 |
5798 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
|
5799 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
|
5800 struct frame *f; |
286 | 5801 { |
3943
cbdf67dd68d0
* xterm.c (frame_highlight, frame_unhighlight): Don't test
Jim Blandy <jimb@redhat.com>
parents:
3938
diff
changeset
|
5802 /* 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
|
5803 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
|
5804 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
|
5805 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
|
5806 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
|
5807 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
|
5808 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
|
5809 UNBLOCK_INPUT; |
12431
80a5aedfb4c7
(XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents:
12192
diff
changeset
|
5810 x_update_cursor (f, 1); |
286 | 5811 } |
5812 | |
5813 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
|
5814 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
|
5815 struct frame *f; |
286 | 5816 { |
3943
cbdf67dd68d0
* xterm.c (frame_highlight, frame_unhighlight): Don't test
Jim Blandy <jimb@redhat.com>
parents:
3938
diff
changeset
|
5817 /* 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
|
5818 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
|
5819 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
|
5820 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
|
5821 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
|
5822 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
|
5823 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
|
5824 UNBLOCK_INPUT; |
12431
80a5aedfb4c7
(XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents:
12192
diff
changeset
|
5825 x_update_cursor (f, 1); |
286 | 5826 } |
5827 | |
771 | 5828 /* The focus has changed. Update the frames as necessary to reflect |
5829 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
|
5830 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
|
5831 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
|
5832 Lisp code can tell when the switch took place by examining the events. */ |
369 | 5833 |
5834 static void | |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5835 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
|
5836 struct x_display_info *dpyinfo; |
771 | 5837 struct frame *frame; |
286 | 5838 { |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5839 struct frame *old_focus = dpyinfo->x_focus_frame; |
286 | 5840 |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5841 if (frame != dpyinfo->x_focus_frame) |
286 | 5842 { |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
5843 /* Set this before calling other routines, so that they see |
771 | 5844 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
|
5845 dpyinfo->x_focus_frame = frame; |
369 | 5846 |
5847 if (old_focus && old_focus->auto_lower) | |
771 | 5848 x_lower_frame (old_focus); |
286 | 5849 |
5850 #if 0 | |
771 | 5851 selected_frame = frame; |
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
5852 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
|
5853 selected_frame); |
771 | 5854 Fselect_window (selected_frame->selected_window); |
5855 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
|
5856 #endif /* ! 0 */ |
286 | 5857 |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5858 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
|
5859 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
|
5860 else |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
5861 pending_autoraise_frame = 0; |
369 | 5862 } |
5863 | |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5864 x_frame_rehighlight (dpyinfo); |
369 | 5865 } |
5866 | |
10223
97fc8c6b4a74
(XTupdate_begin): Discard records of prior mouse highlight
Richard M. Stallman <rms@gnu.org>
parents:
9823
diff
changeset
|
5867 /* 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
|
5868 |
97fc8c6b4a74
(XTupdate_begin): Discard records of prior mouse highlight
Richard M. Stallman <rms@gnu.org>
parents:
9823
diff
changeset
|
5869 void |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5870 x_mouse_leave (dpyinfo) |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5871 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
|
5872 { |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5873 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
|
5874 } |
369 | 5875 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
5876 /* 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
|
5877 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
|
5878 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
|
5879 |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5880 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
|
5881 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
|
5882 the appropriate X display info. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5883 |
369 | 5884 static void |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5885 XTframe_rehighlight (frame) |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5886 struct frame *frame; |
369 | 5887 { |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5888 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
|
5889 } |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5890 |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5891 static void |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5892 x_frame_rehighlight (dpyinfo) |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5893 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
|
5894 { |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5895 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
|
5896 |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5897 if (dpyinfo->x_focus_frame) |
286 | 5898 { |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5899 dpyinfo->x_highlight_frame |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5900 = ((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
|
5901 ? 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
|
5902 : dpyinfo->x_focus_frame); |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5903 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
|
5904 { |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5905 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
|
5906 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
|
5907 } |
286 | 5908 } |
369 | 5909 else |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5910 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
|
5911 |
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5912 if (dpyinfo->x_highlight_frame != old_highlight) |
369 | 5913 { |
5914 if (old_highlight) | |
771 | 5915 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
|
5916 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
|
5917 frame_highlight (dpyinfo->x_highlight_frame); |
369 | 5918 } |
286 | 5919 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5920 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5921 |
286 | 5922 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5923 /* Keyboard processing - modifier keys, vendor-specific keysyms, etc. */ |
286 | 5924 |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5925 /* 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
|
5926 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
|
5927 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
|
5928 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
|
5929 { |
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5930 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
|
5931 KeySym *syms; |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5932 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
|
5933 XModifierKeymap *mods; |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5934 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5935 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
|
5936 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
|
5937 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
|
5938 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
|
5939 dpyinfo->hyper_mod_mask = 0; |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
5940 |
2127
adaf588e32a6
* xterm.c (x_find_modifier_meanings): XDisplayKeycodes only
Jim Blandy <jimb@redhat.com>
parents:
2064
diff
changeset
|
5941 #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
|
5942 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
|
5943 #else |
13884
26245345f6f1
(x_find_modifier_meanings): Fix !X11R4 code to use dpyinfo.
Richard M. Stallman <rms@gnu.org>
parents:
13782
diff
changeset
|
5944 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
|
5945 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
|
5946 #endif |
adaf588e32a6
* xterm.c (x_find_modifier_meanings): XDisplayKeycodes only
Jim Blandy <jimb@redhat.com>
parents:
2064
diff
changeset
|
5947 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5948 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
|
5949 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
|
5950 &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
|
5951 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
|
5952 |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
5953 /* 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
|
5954 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
|
5955 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5956 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
|
5957 |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5958 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
|
5959 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
|
5960 { |
10287
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
5961 KeyCode code |
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
5962 = 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
|
5963 |
6560
a071babfa9ea
(x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents:
6521
diff
changeset
|
5964 /* Zeroes are used for filler. Skip them. */ |
a071babfa9ea
(x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents:
6521
diff
changeset
|
5965 if (code == 0) |
a071babfa9ea
(x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents:
6521
diff
changeset
|
5966 continue; |
a071babfa9ea
(x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents:
6521
diff
changeset
|
5967 |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5968 /* 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
|
5969 { |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5970 int code_col; |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5971 |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5972 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
|
5973 { |
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5974 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
|
5975 |
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5976 switch (sym) |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5977 { |
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5978 case XK_Meta_L: |
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5979 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
|
5980 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
|
5981 break; |
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5982 |
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5983 case XK_Alt_L: |
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5984 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
|
5985 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
|
5986 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
|
5987 |
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
|
5988 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
|
5989 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
|
5990 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
|
5991 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
|
5992 |
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
|
5993 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
|
5994 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
|
5995 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
|
5996 break; |
1436
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
5997 |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
5998 case XK_Shift_Lock: |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
5999 /* 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
|
6000 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
|
6001 dpyinfo->shift_lock_mask = LockMask; |
1436
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
6002 break; |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
6003 } |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
6004 } |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
6005 } |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
6006 } |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
6007 } |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
6008 |
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
6009 /* 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
|
6010 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
|
6011 { |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
6012 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
|
6013 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
|
6014 } |
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
6015 |
2923
c8997402dd6b
(x_find_modifier_meanings): If some keys are meta and alt,
Richard M. Stallman <rms@gnu.org>
parents:
2882
diff
changeset
|
6016 /* 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
|
6017 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
|
6018 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
|
6019 { |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
6020 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
|
6021 } |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
6022 |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
6023 XFree ((char *) syms); |
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
6024 XFreeModifiermap (mods); |
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
6025 } |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
6026 |
2661
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
6027 /* 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
|
6028 Emacs uses. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6029 |
1530
a7f8a1fe258e
* xterm.c (x_convert_modifiers): Declare this to return an
Jim Blandy <jimb@redhat.com>
parents:
1436
diff
changeset
|
6030 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
|
6031 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
|
6032 struct x_display_info *dpyinfo; |
286 | 6033 unsigned int state; |
6034 { | |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
6035 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
|
6036 | ((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
|
6037 | ((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
|
6038 | ((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
|
6039 | ((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
|
6040 | ((state & dpyinfo->hyper_mod_mask) ? hyper_modifier : 0)); |
286 | 6041 } |
6042 | |
2661
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
6043 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
|
6044 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
|
6045 struct x_display_info *dpyinfo; |
2661
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
6046 unsigned int state; |
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
6047 { |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
6048 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
|
6049 | ((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
|
6050 | ((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
|
6051 | ((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
|
6052 | ((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
|
6053 | ((state & meta_modifier) ? dpyinfo->meta_mod_mask : 0)); |
2661
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
6054 } |
12172
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
6055 |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
6056 /* Convert a keysym to its name. */ |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
6057 |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
6058 char * |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
6059 x_get_keysym_name (keysym) |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
6060 KeySym keysym; |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
6061 { |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
6062 char *value; |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
6063 |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
6064 BLOCK_INPUT; |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
6065 value = XKeysymToString (keysym); |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
6066 UNBLOCK_INPUT; |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
6067 |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
6068 return value; |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
6069 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6070 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6071 |
3585
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
6072 |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
6073 /* Mouse clicks and mouse movement. Rah. */ |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
6074 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6075 /* 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
|
6076 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
|
6077 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
|
6078 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
|
6079 |
6023
67aa546e4ff1
(construct_menu_click): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents:
6022
diff
changeset
|
6080 void |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6081 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
|
6082 FRAME_PTR f; |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6083 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
|
6084 register int *x, *y; |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
6085 XRectangle *bounds; |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6086 int noclip; |
3585
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
6087 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6088 /* 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
|
6089 even for negative values. */ |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6090 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
|
6091 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
|
6092 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
|
6093 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
|
6094 |
3585
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
6095 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
|
6096 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
|
6097 |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
6098 if (bounds) |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
6099 { |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
6100 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
|
6101 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
|
6102 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
|
6103 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
|
6104 } |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
6105 |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6106 if (!noclip) |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6107 { |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6108 if (pix_x < 0) |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6109 pix_x = 0; |
16301
a02555b4b2b9
(x_scroll_bar_create, x_scroll_bar_move):
Richard M. Stallman <rms@gnu.org>
parents:
16251
diff
changeset
|
6110 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
|
6111 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
|
6112 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6113 if (pix_y < 0) |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6114 pix_y = 0; |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6115 else if (pix_y > f->height) |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6116 pix_y = f->height; |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6117 } |
3585
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
6118 |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
6119 *x = pix_x; |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
6120 *y = pix_y; |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
6121 } |
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
6122 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6123 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6124 /* 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
|
6125 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
|
6126 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
|
6127 return 0. */ |
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 int |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6130 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
|
6131 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6132 int hpos, vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6133 int *frame_x, *frame_y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6134 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6135 int success_p; |
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 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
|
6138 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
|
6139 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6140 if (display_completed) |
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 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
|
6143 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
|
6144 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
|
6145 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6146 *frame_y = row->y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6147 *frame_x = row->x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6148 while (glyph < end) |
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 *frame_x += glyph->pixel_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6151 ++glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6152 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6153 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6154 success_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6155 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6156 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6157 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6158 *frame_y = *frame_x = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6159 success_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6160 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6161 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6162 *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
|
6163 *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
|
6164 return success_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6165 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6166 |
6055
a9f61727a90c
(construct_mouse_click): Don't convert to glyph units.
Richard M. Stallman <rms@gnu.org>
parents:
6023
diff
changeset
|
6167 |
286 | 6168 /* Prepare a mouse-event in *RESULT for placement in the input queue. |
6169 | |
6170 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
|
6171 the mouse. */ |
286 | 6172 |
6173 static Lisp_Object | |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
6174 construct_mouse_click (result, event, f) |
286 | 6175 struct input_event *result; |
6176 XButtonEvent *event; | |
771 | 6177 struct frame *f; |
286 | 6178 { |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
6179 /* Make the event type no_event; we'll change that when we decide |
286 | 6180 otherwise. */ |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
6181 result->kind = mouse_click; |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6182 result->code = event->button - Button1; |
708 | 6183 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
|
6184 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
|
6185 event->state) |
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
6186 | (event->type == ButtonRelease |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
6187 ? up_modifier |
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
6188 : down_modifier)); |
286 | 6189 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6190 XSETINT (result->x, event->x); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6191 XSETINT (result->y, event->y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6192 XSETFRAME (result->frame_or_window, f); |
30197
3237a5529020
(construct_mouse_click, x_scroll_bar_to_input_event)
Gerd Moellmann <gerd@gnu.org>
parents:
30182
diff
changeset
|
6193 result->arg = Qnil; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6194 return Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6195 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6196 |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6197 |
429 | 6198 /* Function to report a mouse movement to the mainstream Emacs code. |
6199 The input handler calls this. | |
6200 | |
6201 We have received a mouse movement event, which is given in *event. | |
6202 If the mouse is over a different glyph than it was last time, tell | |
6203 the mainstream emacs code by setting mouse_moved. If not, ask for | |
6204 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
|
6205 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6206 static XMotionEvent last_mouse_motion_event; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6207 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
|
6208 |
429 | 6209 static void |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6210 note_mouse_movement (frame, event) |
771 | 6211 FRAME_PTR frame; |
429 | 6212 XMotionEvent *event; |
6213 { | |
732 | 6214 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
|
6215 last_mouse_motion_event = *event; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6216 XSETFRAME (last_mouse_motion_frame, frame); |
732 | 6217 |
7680
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
6218 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
|
6219 { |
12530
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
6220 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
|
6221 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
|
6222 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
|
6223 } |
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
6224 |
429 | 6225 /* 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
|
6226 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
|
6227 || 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
|
6228 || 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
|
6229 || 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
|
6230 { |
12530
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
6231 frame->mouse_moved = 1; |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
6232 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
|
6233 note_mouse_highlight (frame, event->x, event->y); |
429 | 6234 } |
6235 } | |
6236 | |
6644
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
6237 /* 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
|
6238 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6239 int disable_mouse_highlight; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6240 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6241 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6242 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6243 /************************************************************************ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6244 Mouse Face |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6247 /* 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
|
6248 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
|
6249 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
|
6250 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
|
6251 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
|
6252 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
|
6253 date. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6254 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6255 static struct glyph * |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6256 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
|
6257 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6258 int x, y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6259 int *hpos, *vpos, *area; |
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 struct glyph *glyph, *end; |
29600
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
6262 struct glyph_row *row = NULL; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6263 int x0, i, left_area_width; |
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 /* 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
|
6266 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
|
6267 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6268 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
|
6269 if (!row->enabled_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6270 return NULL; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6271 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
|
6272 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6273 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6274 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6275 *vpos = i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6276 *hpos = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6277 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6278 /* 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
|
6279 if (i == w->current_matrix->nrows) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6280 return NULL; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6281 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6282 /* Get the glyph area containing X. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6283 if (w->pseudo_window_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6284 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6285 *area = TEXT_AREA; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6286 x0 = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6287 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6288 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6289 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6290 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
|
6291 if (x < left_area_width) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6292 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6293 *area = LEFT_MARGIN_AREA; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6294 x0 = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6295 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6296 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
|
6297 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6298 *area = TEXT_AREA; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6299 x0 = row->x + left_area_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6300 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6301 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6302 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6303 *area = RIGHT_MARGIN_AREA; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6304 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
|
6305 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6306 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6307 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6308 /* Find glyph containing X. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6309 glyph = row->glyphs[*area]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6310 end = glyph + row->used[*area]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6311 while (glyph < end) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6312 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6313 if (x < x0 + glyph->pixel_width) |
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 if (w->pseudo_window_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6316 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6317 else if (BUFFERP (glyph->object)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6318 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6319 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6320 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6321 x0 += glyph->pixel_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6322 ++glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6323 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6324 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6325 if (glyph == end) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6326 return NULL; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6327 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6328 *hpos = glyph - row->glyphs[*area]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6329 return glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6330 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6331 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6332 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6333 /* 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
|
6334 Takes pseudo-windows into account. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6335 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6336 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6337 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
|
6338 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6339 int *x, *y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6340 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6341 if (w->pseudo_window_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6342 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6343 /* 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
|
6344 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
|
6345 struct frame *f = XFRAME (w->frame); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6346 *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
|
6347 *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
|
6348 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6349 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6350 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6351 *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
|
6352 *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
|
6353 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6354 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6355 |
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 /* 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
|
6358 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
|
6359 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
|
6360 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
|
6361 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
|
6362 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6363 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6364 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
|
6365 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6366 int x, mode_line_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6367 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6368 struct frame *f = XFRAME (w->frame); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6369 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
|
6370 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
|
6371 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6372 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6373 if (mode_line_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6374 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
|
6375 else |
25546 | 6376 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
|
6377 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6378 if (row->enabled_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6379 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6380 struct glyph *glyph, *end; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6381 Lisp_Object help, map; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6382 int x0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6383 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6384 /* Find the glyph under X. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6385 glyph = row->glyphs[TEXT_AREA]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6386 end = glyph + row->used[TEXT_AREA]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6387 x0 = - (FRAME_LEFT_SCROLL_BAR_WIDTH (f) * CANON_X_UNIT (f) |
25465 | 6388 + 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
|
6389 while (glyph < end |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6390 && x >= x0 + glyph->pixel_width) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6391 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6392 x0 += glyph->pixel_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6393 ++glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6394 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6395 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6396 if (glyph < end |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6397 && STRINGP (glyph->object) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6398 && XSTRING (glyph->object)->intervals |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6399 && glyph->charpos >= 0 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6400 && glyph->charpos < XSTRING (glyph->object)->size) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6401 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6402 /* 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
|
6403 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
|
6404 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
|
6405 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
|
6406 Qhelp_echo, glyph->object); |
30050
ed1979c6dfb9
* xterm.c (note_mode_line_highlight, note_mouse_highlight)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30042
diff
changeset
|
6407 if (!NILP (help)) |
30214
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
6408 { |
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
6409 help_echo = help; |
30302
9a5ccf8784f3
(help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
30214
diff
changeset
|
6410 XSETWINDOW (help_echo_window, w); |
30214
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
6411 help_echo_object = glyph->object; |
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
6412 help_echo_pos = glyph->charpos; |
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
6413 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6414 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6415 /* 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
|
6416 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
|
6417 Qlocal_map, glyph->object); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6418 if (!NILP (Fkeymapp (map))) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6419 cursor = f->output_data.x->nontext_cursor; |
30214
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
6420 else |
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
6421 { |
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
6422 map = Fget_text_property (make_number (glyph->charpos), |
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
6423 Qkeymap, glyph->object); |
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
6424 if (!NILP (Fkeymapp (map))) |
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
6425 cursor = f->output_data.x->nontext_cursor; |
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
6426 } |
24991
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 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6429 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6430 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
|
6431 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6432 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6433 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6434 /* 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
|
6435 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
|
6436 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
|
6437 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
|
6438 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6439 static void |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6440 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
|
6441 struct frame *f; |
11915
e2ab839155e1
(XTflash): Use pointers as args to select.
Karl Heuer <kwzh@gnu.org>
parents:
11904
diff
changeset
|
6442 int x, y; |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6443 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6444 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
|
6445 int portion; |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6446 Lisp_Object window; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6447 struct window *w; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6448 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6449 /* 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
|
6450 #ifdef USE_X_TOOLKIT |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6451 if (popup_activated ()) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6452 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6453 #endif |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6454 |
27967
7d61ff2d1530
(note_mouse_highlight): Return quickly if frame's
Gerd Moellmann <gerd@gnu.org>
parents:
27962
diff
changeset
|
6455 if (disable_mouse_highlight |
7d61ff2d1530
(note_mouse_highlight): Return quickly if frame's
Gerd Moellmann <gerd@gnu.org>
parents:
27962
diff
changeset
|
6456 || !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
|
6457 return; |
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
6458 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6459 dpyinfo->mouse_face_mouse_x = x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6460 dpyinfo->mouse_face_mouse_y = y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6461 dpyinfo->mouse_face_mouse_frame = f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6462 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6463 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
|
6464 return; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6465 |
6660
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
6466 if (gc_in_progress) |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
6467 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6468 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
|
6469 return; |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
6470 } |
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
6471 |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6472 /* Which window is that in? */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6473 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
|
6474 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6475 /* 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
|
6476 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
|
6477 clear_mouse_face (dpyinfo); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6478 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6479 /* Not on a window -> return. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6480 if (!WINDOWP (window)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6481 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6482 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6483 /* Convert to window-relative pixel coordinates. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6484 w = XWINDOW (window); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6485 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
|
6486 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6487 /* 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
|
6488 buffer. */ |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6489 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
|
6490 { |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6491 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
|
6492 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6493 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6494 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6495 if (portion == 1 || portion == 3) |
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 /* 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
|
6498 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
|
6499 return; |
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 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6502 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
|
6503 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
|
6504 |
6791
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
6505 /* 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
|
6506 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
|
6507 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
|
6508 portion == 0 |
6791
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
6509 && 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
|
6510 && 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
|
6511 && (XFASTINT (w->last_overlay_modified) |
97283cd93432
(construct_menu_click, note_mouse_highlight, fast_find_position):
Karl Heuer <kwzh@gnu.org>
parents:
17316
diff
changeset
|
6512 == 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
|
6513 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6514 int hpos, vpos, pos, i, area; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6515 struct glyph *glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6516 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6517 /* Find the glyph under X/Y. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6518 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
|
6519 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6520 /* 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
|
6521 if (glyph == NULL |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6522 || area != TEXT_AREA |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6523 || !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
|
6524 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6525 clear_mouse_face (dpyinfo); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6526 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6527 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6528 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6529 pos = glyph->charpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6530 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
|
6531 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6532 /* 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
|
6533 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6534 Lisp_Object mouse_face, overlay, position; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6535 Lisp_Object *overlay_vec; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6536 int len, noverlays; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6537 struct buffer *obuf; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6538 int obegv, ozv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6539 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6540 /* 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
|
6541 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
|
6542 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6543 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6544 /* 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
|
6545 overlays_at and compute_char_face. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6546 obuf = current_buffer; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6547 current_buffer = XBUFFER (w->buffer); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6548 obegv = BEGV; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6549 ozv = ZV; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6550 BEGV = BEG; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6551 ZV = Z; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6552 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6553 /* 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
|
6554 XSETINT (position, pos); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6555 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6556 /* 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
|
6557 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
|
6558 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
|
6559 len = 10; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6560 overlay_vec = (Lisp_Object *) alloca (len * sizeof (Lisp_Object)); |
30700
730f55a93973
(note_mouse_highlight): Update call to overlays_at.
Miles Bader <miles@gnu.org>
parents:
30653
diff
changeset
|
6561 noverlays = overlays_at (pos, 0, &overlay_vec, &len, NULL, NULL, 0); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6562 if (noverlays > len) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6563 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6564 len = noverlays; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6565 overlay_vec = (Lisp_Object *) alloca (len * sizeof (Lisp_Object)); |
30700
730f55a93973
(note_mouse_highlight): Update call to overlays_at.
Miles Bader <miles@gnu.org>
parents:
30653
diff
changeset
|
6566 noverlays = overlays_at (pos, 0, &overlay_vec, &len, NULL, NULL,0); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6567 } |
30371
f69ecffe8453
(note_mouse_highlight): Process overlays in the right
Gerd Moellmann <gerd@gnu.org>
parents:
30369
diff
changeset
|
6568 |
f69ecffe8453
(note_mouse_highlight): Process overlays in the right
Gerd Moellmann <gerd@gnu.org>
parents:
30369
diff
changeset
|
6569 /* Sort overlays into increasing priority order. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6570 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
|
6571 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6572 /* Check mouse-face highlighting. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6573 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
|
6574 && vpos >= dpyinfo->mouse_face_beg_row |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6575 && vpos <= dpyinfo->mouse_face_end_row |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6576 && (vpos > dpyinfo->mouse_face_beg_row |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6577 || hpos >= dpyinfo->mouse_face_beg_col) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6578 && (vpos < dpyinfo->mouse_face_end_row |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6579 || hpos < dpyinfo->mouse_face_end_col |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6580 || dpyinfo->mouse_face_past_end))) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6581 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6582 /* 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
|
6583 clear_mouse_face (dpyinfo); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6584 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6585 /* 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
|
6586 overlay = Qnil; |
30371
f69ecffe8453
(note_mouse_highlight): Process overlays in the right
Gerd Moellmann <gerd@gnu.org>
parents:
30369
diff
changeset
|
6587 for (i = noverlays - 1; i >= 0; --i) |
24991
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 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
|
6590 if (!NILP (mouse_face)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6591 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6592 overlay = overlay_vec[i]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6593 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6594 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6595 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6596 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6597 /* 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
|
6598 if (NILP (overlay)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6599 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
|
6600 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6601 /* Handle the overlay case. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6602 if (! NILP (overlay)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6603 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6604 /* 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
|
6605 should be active. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6606 Lisp_Object before, after; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6607 int ignore; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6608 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6609 before = Foverlay_start (overlay); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6610 after = Foverlay_end (overlay); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6611 /* 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
|
6612 fast_find_position (w, XFASTINT (before), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6613 &dpyinfo->mouse_face_beg_col, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6614 &dpyinfo->mouse_face_beg_row, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6615 &dpyinfo->mouse_face_beg_x, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6616 &dpyinfo->mouse_face_beg_y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6617 dpyinfo->mouse_face_past_end |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6618 = !fast_find_position (w, XFASTINT (after), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6619 &dpyinfo->mouse_face_end_col, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6620 &dpyinfo->mouse_face_end_row, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6621 &dpyinfo->mouse_face_end_x, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6622 &dpyinfo->mouse_face_end_y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6623 dpyinfo->mouse_face_window = window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6624 dpyinfo->mouse_face_face_id |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6625 = 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
|
6626 &ignore, pos + 1, 1); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6627 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6628 /* Display it as active. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6629 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
|
6630 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6631 /* Handle the text property case. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6632 else if (! NILP (mouse_face)) |
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 /* 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
|
6635 should be active. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6636 Lisp_Object before, after, beginning, end; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6637 int ignore; |
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 beginning = Fmarker_position (w->start); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6640 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
|
6641 - XFASTINT (w->window_end_pos))); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6642 before |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6643 = 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
|
6644 Qmouse_face, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6645 w->buffer, beginning); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6646 after |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6647 = 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
|
6648 w->buffer, end); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6649 /* 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
|
6650 fast_find_position (w, XFASTINT (before), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6651 &dpyinfo->mouse_face_beg_col, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6652 &dpyinfo->mouse_face_beg_row, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6653 &dpyinfo->mouse_face_beg_x, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6654 &dpyinfo->mouse_face_beg_y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6655 dpyinfo->mouse_face_past_end |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6656 = !fast_find_position (w, XFASTINT (after), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6657 &dpyinfo->mouse_face_end_col, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6658 &dpyinfo->mouse_face_end_row, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6659 &dpyinfo->mouse_face_end_x, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6660 &dpyinfo->mouse_face_end_y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6661 dpyinfo->mouse_face_window = window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6662 dpyinfo->mouse_face_face_id |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6663 = 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
|
6664 &ignore, pos + 1, 1); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6665 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6666 /* Display it as active. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6667 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
|
6668 } |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6671 /* Look for a `help-echo' property. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6672 { |
30369
cf4163d1218e
(note_mouse_highlight): If help-echo was found in an
Gerd Moellmann <gerd@gnu.org>
parents:
30321
diff
changeset
|
6673 Lisp_Object help, overlay; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6674 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6675 /* Check overlays first. */ |
31694
97c48afc4c5a
(x_draw_image_glyph_string): Remove a comment describing
Gerd Moellmann <gerd@gnu.org>
parents:
31614
diff
changeset
|
6676 help = overlay = Qnil; |
30371
f69ecffe8453
(note_mouse_highlight): Process overlays in the right
Gerd Moellmann <gerd@gnu.org>
parents:
30369
diff
changeset
|
6677 for (i = noverlays - 1; i >= 0 && NILP (help); --i) |
30369
cf4163d1218e
(note_mouse_highlight): If help-echo was found in an
Gerd Moellmann <gerd@gnu.org>
parents:
30321
diff
changeset
|
6678 { |
cf4163d1218e
(note_mouse_highlight): If help-echo was found in an
Gerd Moellmann <gerd@gnu.org>
parents:
30321
diff
changeset
|
6679 overlay = overlay_vec[i]; |
cf4163d1218e
(note_mouse_highlight): If help-echo was found in an
Gerd Moellmann <gerd@gnu.org>
parents:
30321
diff
changeset
|
6680 help = Foverlay_get (overlay, Qhelp_echo); |
cf4163d1218e
(note_mouse_highlight): If help-echo was found in an
Gerd Moellmann <gerd@gnu.org>
parents:
30321
diff
changeset
|
6681 } |
30214
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
6682 |
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
6683 if (!NILP (help)) |
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
6684 { |
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
6685 help_echo = help; |
30302
9a5ccf8784f3
(help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
30214
diff
changeset
|
6686 help_echo_window = window; |
30369
cf4163d1218e
(note_mouse_highlight): If help-echo was found in an
Gerd Moellmann <gerd@gnu.org>
parents:
30321
diff
changeset
|
6687 help_echo_object = overlay; |
30214
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
6688 help_echo_pos = pos; |
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
6689 } |
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
6690 else |
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
6691 { |
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
6692 /* Try text properties. */ |
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
6693 if ((STRINGP (glyph->object) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6694 && glyph->charpos >= 0 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6695 && glyph->charpos < XSTRING (glyph->object)->size) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6696 || (BUFFERP (glyph->object) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6697 && glyph->charpos >= BEGV |
30214
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
6698 && glyph->charpos < ZV)) |
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
6699 help = Fget_text_property (make_number (glyph->charpos), |
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
6700 Qhelp_echo, glyph->object); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6701 |
30214
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
6702 if (!NILP (help)) |
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
6703 { |
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
6704 help_echo = help; |
30302
9a5ccf8784f3
(help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
30214
diff
changeset
|
6705 help_echo_window = window; |
30214
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
6706 help_echo_object = glyph->object; |
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
6707 help_echo_pos = glyph->charpos; |
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
6708 } |
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
6709 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6710 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6711 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6712 BEGV = obegv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6713 ZV = ozv; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6714 current_buffer = obuf; |
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 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6717 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6718 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6719 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6720 redo_mouse_highlight () |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6721 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6722 if (!NILP (last_mouse_motion_frame) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6723 && 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
|
6724 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
|
6725 last_mouse_motion_event.x, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6726 last_mouse_motion_event.y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6727 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6728 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6729 |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6730 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6731 /*********************************************************************** |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6732 Tool-bars |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6733 ***********************************************************************/ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6734 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6735 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
|
6736 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
|
6737 |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6738 /* 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
|
6739 or -1. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6740 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6741 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
|
6742 |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6743 |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6744 /* 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
|
6745 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
|
6746 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
|
6747 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
|
6748 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
|
6749 |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6750 -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
|
6751 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
|
6752 1 otherwise. */ |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6753 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6754 static int |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6755 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
|
6756 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6757 int x, y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6758 struct glyph **glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6759 int *hpos, *vpos, *prop_idx; |
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 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
|
6762 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
|
6763 int area; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6764 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6765 /* Find the glyph under X/Y. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6766 *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
|
6767 if (*glyph == NULL) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6768 return -1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6769 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6770 /* 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
|
6771 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
|
6772 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
|
6773 return -1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6774 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6775 /* 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
|
6776 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
|
6777 && *vpos >= dpyinfo->mouse_face_beg_row |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6778 && *vpos <= dpyinfo->mouse_face_end_row |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6779 && (*vpos > dpyinfo->mouse_face_beg_row |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6780 || *hpos >= dpyinfo->mouse_face_beg_col) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6781 && (*vpos < dpyinfo->mouse_face_end_row |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6782 || *hpos < dpyinfo->mouse_face_end_col |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6783 || dpyinfo->mouse_face_past_end)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6784 return 0; |
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 return 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6787 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6788 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6789 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6790 /* 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
|
6791 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
|
6792 or ButtonRelase. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6793 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6794 static void |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6795 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
|
6796 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6797 XButtonEvent *button_event; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6798 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6799 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
|
6800 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
|
6801 int hpos, vpos, prop_idx; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6802 struct glyph *glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6803 Lisp_Object enabled_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6804 int x = button_event->x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6805 int y = button_event->y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6806 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6807 /* 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
|
6808 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
|
6809 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
|
6810 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6811 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6812 /* 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
|
6813 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
|
6814 ->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
|
6815 if (NILP (enabled_p)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6816 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6817 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6818 if (button_event->type == ButtonPress) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6819 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6820 /* Show item in pressed state. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6821 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
|
6822 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
|
6823 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
|
6824 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6825 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6826 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6827 Lisp_Object key, frame; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6828 struct input_event event; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6829 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6830 /* Show item in released state. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6831 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
|
6832 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
|
6833 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6834 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
|
6835 ->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
|
6836 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6837 XSETFRAME (frame, f); |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6838 event.kind = TOOL_BAR_EVENT; |
30182
73181a26fc85
(x_handle_tool_bar_click): Store the frame in the
Gerd Moellmann <gerd@gnu.org>
parents:
30160
diff
changeset
|
6839 event.frame_or_window = frame; |
73181a26fc85
(x_handle_tool_bar_click): Store the frame in the
Gerd Moellmann <gerd@gnu.org>
parents:
30160
diff
changeset
|
6840 event.arg = frame; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6841 kbd_buffer_store_event (&event); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6842 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6843 event.kind = TOOL_BAR_EVENT; |
30182
73181a26fc85
(x_handle_tool_bar_click): Store the frame in the
Gerd Moellmann <gerd@gnu.org>
parents:
30160
diff
changeset
|
6844 event.frame_or_window = frame; |
73181a26fc85
(x_handle_tool_bar_click): Store the frame in the
Gerd Moellmann <gerd@gnu.org>
parents:
30160
diff
changeset
|
6845 event.arg = key; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6846 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
|
6847 button_event->state); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6848 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
|
6849 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
|
6850 } |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6851 } |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6852 |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6853 |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6854 /* 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
|
6855 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
|
6856 note_mouse_highlight. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6857 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6858 static void |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6859 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
|
6860 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6861 int x, y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6862 { |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6863 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
|
6864 struct window *w = XWINDOW (window); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6865 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
|
6866 int hpos, vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6867 struct glyph *glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6868 struct glyph_row *row; |
25716
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
6869 int i; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6870 Lisp_Object enabled_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6871 int prop_idx; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6872 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
|
6873 int mouse_down_p, rc; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6874 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6875 /* 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
|
6876 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
|
6877 if (x <= 0 || y <= 0) |
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 clear_mouse_face (dpyinfo); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6880 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6881 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6882 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6883 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
|
6884 if (rc < 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6885 { |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6886 /* Not on tool-bar item. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6887 clear_mouse_face (dpyinfo); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6888 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6889 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6890 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
|
6891 /* 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
|
6892 goto set_help_echo; |
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 clear_mouse_face (dpyinfo); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6895 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6896 /* 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
|
6897 mouse_down_p = (dpyinfo->grabbed |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6898 && f == last_mouse_frame |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6899 && FRAME_LIVE_P (f)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6900 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
|
6901 && 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
|
6902 return; |
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 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
|
6905 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
|
6906 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6907 /* 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
|
6908 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
|
6909 ->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
|
6910 if (!NILP (enabled_p)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6911 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6912 /* 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
|
6913 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
|
6914 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
|
6915 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
|
6916 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
|
6917 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6918 /* 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
|
6919 dpyinfo->mouse_face_beg_col = hpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6920 dpyinfo->mouse_face_beg_row = vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6921 dpyinfo->mouse_face_beg_x = x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6922 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
|
6923 dpyinfo->mouse_face_past_end = 0; |
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 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
|
6926 dpyinfo->mouse_face_end_row = vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6927 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
|
6928 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
|
6929 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
|
6930 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
|
6931 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6932 /* Display it as active. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6933 show_mouse_face (dpyinfo, draw); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6934 dpyinfo->mouse_face_image_state = draw; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6935 } |
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 set_help_echo: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6938 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6939 /* 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
|
6940 XTread_socket does the rest. */ |
30302
9a5ccf8784f3
(help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
30214
diff
changeset
|
6941 help_echo_object = help_echo_window = Qnil; |
30214
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
6942 help_echo_pos = -1; |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6943 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
|
6944 ->contents[prop_idx + TOOL_BAR_ITEM_HELP]); |
30050
ed1979c6dfb9
* xterm.c (note_mode_line_highlight, note_mouse_highlight)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30042
diff
changeset
|
6945 if (NILP (help_echo)) |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6946 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
|
6947 ->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
|
6948 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6949 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6950 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6951 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6952 /* 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
|
6953 *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
|
6954 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
|
6955 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
|
6956 last line in W. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6957 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6958 static int |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6959 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
|
6960 struct window *w; |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6961 int pos; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6962 int *hpos, *vpos, *x, *y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6963 { |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6964 int i; |
6644
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
6965 int lastcol; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6966 int maybe_next_line_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6967 int line_start_position; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6968 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
|
6969 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
|
6970 struct glyph_row *best_row = row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6971 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
|
6972 int current_x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6973 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6974 while (row->y < yb) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6975 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6976 if (row->used[TEXT_AREA]) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6977 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
|
6978 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6979 line_start_position = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6980 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6981 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
|
6982 break; |
9762
567e3670acc3
(fast_find_position): Special case if POS is end of buffer.
Richard M. Stallman <rms@gnu.org>
parents:
9741
diff
changeset
|
6983 /* 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
|
6984 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
|
6985 else if (line_start_position == pos |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6986 && pos == BUF_ZV (XBUFFER (w->buffer))) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6987 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6988 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
|
6989 break; |
567e3670acc3
(fast_find_position): Special case if POS is end of buffer.
Richard M. Stallman <rms@gnu.org>
parents:
9741
diff
changeset
|
6990 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6991 else if (line_start_position > 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6992 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6993 best_row = row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6994 best_row_vpos = row_vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6995 } |
28281
bd0839655485
(fast_find_position): Make sure not to consider rows
Gerd Moellmann <gerd@gnu.org>
parents:
28231
diff
changeset
|
6996 |
bd0839655485
(fast_find_position): Make sure not to consider rows
Gerd Moellmann <gerd@gnu.org>
parents:
28231
diff
changeset
|
6997 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
|
6998 break; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6999 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7000 ++row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7001 ++row_vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7002 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7003 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7004 /* 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
|
7005 lastcol = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7006 current_x = best_row->x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7007 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
|
7008 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7009 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
|
7010 int charpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7011 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7012 charpos = glyph->charpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7013 if (charpos == pos) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7014 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7015 *hpos = i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7016 *vpos = best_row_vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7017 *x = current_x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7018 *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
|
7019 return 1; |
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
7020 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7021 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
|
7022 break; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7023 else if (charpos > 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7024 lastcol = i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7025 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7026 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
|
7027 } |
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
7028 |
9762
567e3670acc3
(fast_find_position): Special case if POS is end of buffer.
Richard M. Stallman <rms@gnu.org>
parents:
9741
diff
changeset
|
7029 /* 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
|
7030 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
|
7031 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
|
7032 if (maybe_next_line_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7033 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7034 ++best_row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7035 ++best_row_vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7036 lastcol = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7037 current_x = best_row->x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7038 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7039 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7040 *vpos = best_row_vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7041 *hpos = lastcol + 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7042 *x = current_x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7043 *y = best_row->y; |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
7044 return 0; |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
7045 } |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
7046 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7047 |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
7048 /* 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
|
7049 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
|
7050 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
7051 static void |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7052 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
|
7053 struct x_display_info *dpyinfo; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7054 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
|
7055 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
7056 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
|
7057 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
|
7058 int i; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7059 int cursor_off_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7060 struct cursor_pos saved_cursor; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7061 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7062 saved_cursor = output_cursor; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7063 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7064 /* 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
|
7065 to do anything. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7066 if (w->current_matrix == NULL) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7067 goto set_x_cursor; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7068 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7069 /* 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
|
7070 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
|
7071 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
|
7072 goto set_x_cursor; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7073 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7074 set_output_cursor (&w->phys_cursor); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7075 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7076 /* 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
|
7077 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
|
7078 i <= dpyinfo->mouse_face_end_row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7079 i++) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7080 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7081 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
|
7082 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
|
7083 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7084 /* 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
|
7085 if (!row->enabled_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7086 continue; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7087 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7088 /* 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
|
7089 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
|
7090 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7091 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
|
7092 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
|
7093 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7094 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7095 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7096 start_hpos = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7097 start_x = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7098 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7099 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7100 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
|
7101 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
|
7102 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7103 end_hpos = row->used[TEXT_AREA]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7104 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7105 /* 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
|
7106 cursor off. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7107 if (!w->pseudo_window_p |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7108 && i == output_cursor.vpos |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7109 && output_cursor.hpos >= start_hpos - 1 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7110 && output_cursor.hpos <= end_hpos) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7111 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7112 x_update_window_cursor (w, 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7113 cursor_off_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7114 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7115 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7116 if (end_hpos > start_hpos) |
30153
1eb41ec71ea5
(x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents:
30137
diff
changeset
|
7117 { |
1eb41ec71ea5
(x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents:
30137
diff
changeset
|
7118 row->mouse_face_p = draw == DRAW_MOUSE_FACE; |
1eb41ec71ea5
(x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents:
30137
diff
changeset
|
7119 x_draw_glyphs (w, start_x, row, TEXT_AREA, |
1eb41ec71ea5
(x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents:
30137
diff
changeset
|
7120 start_hpos, end_hpos, draw, NULL, NULL, 0); |
1eb41ec71ea5
(x_update_window_begin): No need to turn off the mouse
Gerd Moellmann <gerd@gnu.org>
parents:
30137
diff
changeset
|
7121 } |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
7122 } |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
7123 |
6660
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
7124 /* 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
|
7125 if (cursor_off_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7126 x_display_cursor (w, 1, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7127 output_cursor.hpos, output_cursor.vpos, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7128 output_cursor.x, output_cursor.y); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7129 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7130 output_cursor = saved_cursor; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7131 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7132 set_x_cursor: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7133 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7134 /* Change the mouse cursor. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7135 if (draw == DRAW_NORMAL_TEXT) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7136 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
|
7137 f->output_data.x->text_cursor); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7138 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
|
7139 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
|
7140 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
|
7141 else |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
7142 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
|
7143 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
|
7144 } |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
7145 |
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
7146 /* 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
|
7147 Redraw it un-highlighted first. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7148 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7149 void |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
7150 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
|
7151 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
|
7152 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7153 if (tip_frame) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7154 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7155 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
7156 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
|
7157 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
|
7158 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
7159 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
|
7160 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
|
7161 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
|
7162 } |
16491
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
7163 |
30160
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
7164 |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
7165 /* Clear any mouse-face on window W. This function is part of the |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
7166 redisplay interface, and is called from try_window_id and similar |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
7167 functions to ensure the mouse-highlight is off. */ |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
7168 |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
7169 static void |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
7170 x_clear_mouse_face (w) |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
7171 struct window *w; |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
7172 { |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
7173 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (XFRAME (w->frame)); |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
7174 Lisp_Object window; |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
7175 |
31864
3df9d3316990
(x_clear_mouse_face): Blick/unblock input.
Gerd Moellmann <gerd@gnu.org>
parents:
31844
diff
changeset
|
7176 BLOCK_INPUT; |
30160
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
7177 XSETWINDOW (window, w); |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
7178 if (EQ (window, dpyinfo->mouse_face_window)) |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
7179 clear_mouse_face (dpyinfo); |
31864
3df9d3316990
(x_clear_mouse_face): Blick/unblock input.
Gerd Moellmann <gerd@gnu.org>
parents:
31844
diff
changeset
|
7180 UNBLOCK_INPUT; |
30160
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
7181 } |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
7182 |
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
7183 |
16491
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
7184 /* 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
|
7185 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
|
7186 |
21514 | 7187 void |
16491
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
7188 cancel_mouse_face (f) |
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
7189 FRAME_PTR f; |
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
7190 { |
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
7191 Lisp_Object window; |
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
7192 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
|
7193 |
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
7194 window = dpyinfo->mouse_face_window; |
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
7195 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
|
7196 { |
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
7197 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
|
7198 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
|
7199 dpyinfo->mouse_face_window = Qnil; |
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
7200 } |
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
7201 } |
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
7202 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7203 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
|
7204 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
|
7205 |
429 | 7206 /* 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
|
7207 *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
|
7208 |
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
7209 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
|
7210 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
|
7211 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
|
7212 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
|
7213 |
11436
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
7214 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
|
7215 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
|
7216 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
|
7217 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7218 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
|
7219 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
|
7220 |
3669
fd4187a96445
(XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents:
3639
diff
changeset
|
7221 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
|
7222 |
429 | 7223 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
|
7224 movement. */ |
429 | 7225 |
7226 static void | |
11122
ce63fb361ae9
(XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents:
11015
diff
changeset
|
7227 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
|
7228 FRAME_PTR *fp; |
11122
ce63fb361ae9
(XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents:
11015
diff
changeset
|
7229 int insist; |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7230 Lisp_Object *bar_window; |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7231 enum scroll_bar_part *part; |
429 | 7232 Lisp_Object *x, *y; |
732 | 7233 unsigned long *time; |
429 | 7234 { |
3669
fd4187a96445
(XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents:
3639
diff
changeset
|
7235 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
|
7236 |
429 | 7237 BLOCK_INPUT; |
7238 | |
20180
bfbf6a2939a3
(XTmouse_position): Handle INSIST < 0.
Karl Heuer <kwzh@gnu.org>
parents:
19447
diff
changeset
|
7239 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
|
7240 x_scroll_bar_report_motion (fp, bar_window, part, x, y, time); |
429 | 7241 else |
7242 { | |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7243 Window root; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7244 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
|
7245 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7246 Window dummy_window; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7247 int dummy; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7248 |
12530
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
7249 Lisp_Object frame, tail; |
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
7250 |
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
7251 /* 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
|
7252 FOR_EACH_FRAME (tail, frame) |
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
7253 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
|
7254 XFRAME (frame)->mouse_moved = 0; |
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
7255 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7256 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
|
7257 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7258 /* 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
|
7259 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
|
7260 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
|
7261 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7262 /* 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
|
7263 &root, |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7264 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7265 /* 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
|
7266 a different screen. */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7267 &dummy_window, |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7268 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7269 /* The position on that root window. */ |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
7270 &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
|
7271 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7272 /* 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
|
7273 &dummy, &dummy, |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7274 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7275 /* 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
|
7276 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
|
7277 (unsigned int *) &dummy); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7278 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7279 /* 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
|
7280 containing the pointer. */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7281 { |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7282 Window win, child; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7283 int win_x, win_y; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7284 int parent_x = 0, parent_y = 0; |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
7285 int count; |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7286 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7287 win = root; |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7288 |
11436
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
7289 /* 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
|
7290 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
|
7291 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
|
7292 |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
7293 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
|
7294 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
7295 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
|
7296 && 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
|
7297 { |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7298 /* 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
|
7299 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
|
7300 XTranslateCoordinates (FRAME_X_DISPLAY (*fp), |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7301 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7302 /* From-window, to-window. */ |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7303 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
|
7304 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7305 /* 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
|
7306 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
|
7307 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7308 /* Child of win. */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7309 &child); |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7310 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
|
7311 } |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7312 else |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7313 { |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7314 while (1) |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7315 { |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
7316 XTranslateCoordinates (FRAME_X_DISPLAY (*fp), |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7317 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7318 /* From-window, to-window. */ |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7319 root, win, |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7320 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7321 /* From-position, to-position. */ |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7322 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
|
7323 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7324 /* Child of win. */ |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7325 &child); |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7326 |
13627
8873aa3451dd
(XTmouse_position): Exit the loop if child == win.
Richard M. Stallman <rms@gnu.org>
parents:
13598
diff
changeset
|
7327 if (child == None || child == win) |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7328 break; |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7329 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7330 win = child; |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7331 parent_x = win_x; |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7332 parent_y = win_y; |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7333 } |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7334 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7335 /* Now we know that: |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7336 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
|
7337 (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
|
7338 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
|
7339 (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
|
7340 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
|
7341 (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
|
7342 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
|
7343 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
|
7344 never use them in that case.) */ |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7345 |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
7346 /* 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
|
7347 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
|
7348 } |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
7349 |
11436
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
7350 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
|
7351 f1 = 0; |
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
7352 |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
7353 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
|
7354 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7355 /* 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
|
7356 if (! f1) |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7357 { |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7358 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
|
7359 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7360 if (bar) |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7361 { |
3669
fd4187a96445
(XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents:
3639
diff
changeset
|
7362 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
|
7363 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
|
7364 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
|
7365 } |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7366 } |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7367 |
20180
bfbf6a2939a3
(XTmouse_position): Handle INSIST < 0.
Karl Heuer <kwzh@gnu.org>
parents:
19447
diff
changeset
|
7368 if (f1 == 0 && insist > 0) |
25682
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
7369 f1 = SELECTED_FRAME (); |
11122
ce63fb361ae9
(XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents:
11015
diff
changeset
|
7370 |
3669
fd4187a96445
(XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents:
3639
diff
changeset
|
7371 if (f1) |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7372 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7373 /* 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
|
7374 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
|
7375 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
|
7376 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
|
7377 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
|
7378 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
|
7379 the frame are divided into. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7380 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7381 #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
|
7382 int ignore1, ignore2; |
a9f61727a90c
(construct_mouse_click): Don't convert to glyph units.
Richard M. Stallman <rms@gnu.org>
parents:
6023
diff
changeset
|
7383 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
|
7384 &last_mouse_glyph, |
11122
ce63fb361ae9
(XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents:
11015
diff
changeset
|
7385 FRAME_X_DISPLAY_INFO (f1)->grabbed |
ce63fb361ae9
(XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents:
11015
diff
changeset
|
7386 || insist); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7387 #else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7388 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7389 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
|
7390 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
|
7391 int x = win_x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7392 int y = win_y; |
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 /* 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
|
7395 round down even for negative values. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7396 if (x < 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7397 x -= width - 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7398 if (y < 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7399 y -= height - 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7400 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7401 last_mouse_glyph.width = width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7402 last_mouse_glyph.height = height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7403 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
|
7404 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
|
7405 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7406 #endif |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7407 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7408 *bar_window = Qnil; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7409 *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
|
7410 *fp = f1; |
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
7411 XSETINT (*x, win_x); |
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
7412 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
|
7413 *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
|
7414 } |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7415 } |
429 | 7416 } |
7417 | |
7418 UNBLOCK_INPUT; | |
7419 } | |
24991
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7422 #ifdef USE_X_TOOLKIT |
27428
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7423 |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7424 /* 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
|
7425 Xt timeouts, if needed. We must avoid calling XtAppPending as |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7426 much as possible because that function does an implicit XFlush |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7427 that slows us down. */ |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7428 |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7429 static void |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7430 x_process_timeouts (timer) |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7431 struct atimer *timer; |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7432 { |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7433 if (toolkit_scroll_bar_interaction || popup_activated_flag) |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7434 { |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7435 BLOCK_INPUT; |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7436 while (XtAppPending (Xt_app_con) & XtIMTimer) |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7437 XtAppProcessEvent (Xt_app_con, XtIMTimer); |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7438 UNBLOCK_INPUT; |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7439 } |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7440 } |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7441 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7442 #endif /* USE_X_TOOLKIT */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7443 |
429 | 7444 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7445 /* Scroll bar support. */ |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7446 |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7447 /* 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
|
7448 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
|
7449 bits. */ |
27428
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7450 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7451 static struct scroll_bar * |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7452 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
|
7453 Window window_id; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7454 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7455 Lisp_Object tail; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7456 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7457 for (tail = Vframe_list; |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7458 XGCTYPE (tail) == Lisp_Cons; |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
7459 tail = XCDR (tail)) |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7460 { |
6521
a975c5944916
(x_window_to_scroll_bar, x_new_font): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents:
6413
diff
changeset
|
7461 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
|
7462 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
7463 frame = XCAR (tail); |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7464 /* 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
|
7465 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
|
7466 abort (); |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7467 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7468 /* 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
|
7469 right window ID. */ |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7470 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
|
7471 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
|
7472 /* 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
|
7473 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
|
7474 ! GC_NILP (bar) || (bar = condemned, |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7475 condemned = Qnil, |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7476 ! 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
|
7477 bar = XSCROLL_BAR (bar)->next) |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7478 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
|
7479 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
|
7480 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7481 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7482 return 0; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7483 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7484 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7485 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7486 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7487 /************************************************************************ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7488 Toolkit scroll bars |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7489 ************************************************************************/ |
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 #if USE_TOOLKIT_SCROLL_BARS |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7492 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7493 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
|
7494 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
|
7495 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
|
7496 struct scroll_bar *)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7497 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
|
7498 int, int, int)); |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7501 /* 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
|
7502 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7503 static XtActionHookId action_hook_id; |
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 /* 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
|
7506 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
|
7507 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7508 static Lisp_Object window_being_scrolled; |
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 /* 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
|
7511 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7512 static int last_scroll_bar_part; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7513 |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7514 /* 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
|
7515 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
|
7516 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7517 static Boolean xaw3d_arrow_scroll; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7518 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7519 /* 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
|
7520 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
|
7521 to avoid jerkyness. */ |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7522 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7523 static Boolean xaw3d_pick_top; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7524 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7525 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7526 /* 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
|
7527 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
|
7528 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
|
7529 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
|
7530 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7531 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7532 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
|
7533 num_params) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7534 Widget widget; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7535 XtPointer client_data; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7536 String action_name; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7537 XEvent *event; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7538 String *params; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7539 Cardinal *num_params; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7540 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7541 int scroll_bar_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7542 char *end_action; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7543 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7544 #ifdef USE_MOTIF |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7545 scroll_bar_p = XmIsScrollBar (widget); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7546 end_action = "Release"; |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7547 #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
|
7548 scroll_bar_p = XtIsSubclass (widget, scrollbarWidgetClass); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7549 end_action = "EndScroll"; |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7550 #endif /* USE_MOTIF */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7551 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7552 if (scroll_bar_p |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7553 && strcmp (action_name, end_action) == 0 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7554 && WINDOWP (window_being_scrolled)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7555 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7556 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7557 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7558 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
|
7559 scroll_bar_end_scroll, 0, 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7560 w = XWINDOW (window_being_scrolled); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7561 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
|
7562 window_being_scrolled = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7563 last_scroll_bar_part = -1; |
27428
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7564 |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7565 /* Xt timeouts no longer needed. */ |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7566 toolkit_scroll_bar_interaction = 0; |
24991
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7570 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7571 /* 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
|
7572 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
|
7573 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
|
7574 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
|
7575 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7576 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7577 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
|
7578 Lisp_Object window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7579 int part, portion, whole; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7580 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7581 XEvent event; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7582 XClientMessageEvent *ev = (XClientMessageEvent *) &event; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7583 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
|
7584 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7585 /* 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
|
7586 ev->type = ClientMessage; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7587 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
|
7588 ev->display = FRAME_X_DISPLAY (f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7589 ev->window = FRAME_X_WINDOW (f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7590 ev->format = 32; |
29717
acaa36b47f50
fix up more Lisp_Object/int conversion issues
Ken Raeburn <raeburn@raeburn.org>
parents:
29619
diff
changeset
|
7591 ev->data.l[0] = (long) XFASTINT (window); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7592 ev->data.l[1] = (long) part; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7593 ev->data.l[2] = (long) 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7594 ev->data.l[3] = (long) portion; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7595 ev->data.l[4] = (long) whole; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7596 |
27428
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7597 /* Make Xt timeouts work while the scroll bar is active. */ |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7598 toolkit_scroll_bar_interaction = 1; |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
7599 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7600 /* 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
|
7601 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
|
7602 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
|
7603 BLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7604 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
|
7605 UNBLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7606 } |
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 /* 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
|
7610 in *IEVENT. */ |
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 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7613 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
|
7614 XEvent *event; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7615 struct input_event *ievent; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7616 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7617 XClientMessageEvent *ev = (XClientMessageEvent *) event; |
29717
acaa36b47f50
fix up more Lisp_Object/int conversion issues
Ken Raeburn <raeburn@raeburn.org>
parents:
29619
diff
changeset
|
7618 Lisp_Object window; |
acaa36b47f50
fix up more Lisp_Object/int conversion issues
Ken Raeburn <raeburn@raeburn.org>
parents:
29619
diff
changeset
|
7619 struct frame *f; |
acaa36b47f50
fix up more Lisp_Object/int conversion issues
Ken Raeburn <raeburn@raeburn.org>
parents:
29619
diff
changeset
|
7620 |
acaa36b47f50
fix up more Lisp_Object/int conversion issues
Ken Raeburn <raeburn@raeburn.org>
parents:
29619
diff
changeset
|
7621 XSETFASTINT (window, ev->data.l[0]); |
acaa36b47f50
fix up more Lisp_Object/int conversion issues
Ken Raeburn <raeburn@raeburn.org>
parents:
29619
diff
changeset
|
7622 f = XFRAME (XWINDOW (window)->frame); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7623 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7624 ievent->kind = scroll_bar_click; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7625 ievent->frame_or_window = window; |
30197
3237a5529020
(construct_mouse_click, x_scroll_bar_to_input_event)
Gerd Moellmann <gerd@gnu.org>
parents:
30182
diff
changeset
|
7626 ievent->arg = Qnil; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7627 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
|
7628 ievent->part = ev->data.l[1]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7629 ievent->code = ev->data.l[2]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7630 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
|
7631 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
|
7632 ievent->modifiers = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7633 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7634 |
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 #ifdef USE_MOTIF |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7637 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7638 /* 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
|
7639 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7640 #define XM_SB_MIN 1 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7641 #define XM_SB_MAX 10000000 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7642 #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
|
7643 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7644 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7645 /* 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
|
7646 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
|
7647 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
|
7648 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7649 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7650 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
|
7651 Widget widget; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7652 XtPointer client_data, call_data; |
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 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
|
7655 XmScrollBarCallbackStruct *cs = (XmScrollBarCallbackStruct *) call_data; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7656 double percent; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7657 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
|
7658 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7659 switch (cs->reason) |
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 case XmCR_DECREMENT: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7662 bar->dragging = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7663 part = scroll_bar_up_arrow; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7664 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7665 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7666 case XmCR_INCREMENT: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7667 bar->dragging = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7668 part = scroll_bar_down_arrow; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7669 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7670 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7671 case XmCR_PAGE_DECREMENT: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7672 bar->dragging = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7673 part = scroll_bar_above_handle; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7674 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7675 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7676 case XmCR_PAGE_INCREMENT: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7677 bar->dragging = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7678 part = scroll_bar_below_handle; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7679 break; |
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 case XmCR_TO_TOP: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7682 bar->dragging = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7683 part = scroll_bar_to_top; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7684 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7685 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7686 case XmCR_TO_BOTTOM: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7687 bar->dragging = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7688 part = scroll_bar_to_bottom; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7689 break; |
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 case XmCR_DRAG: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7692 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7693 int slider_size; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7694 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
|
7695 && XINT (bar->dragging) <= cs->value); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7696 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7697 /* Get the slider size. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7698 BLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7699 XtVaGetValues (widget, XmNsliderSize, &slider_size, NULL); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7700 UNBLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7701 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7702 /* 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
|
7703 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
|
7704 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
|
7705 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
|
7706 we have to do something. |
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 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
|
7709 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
|
7710 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
|
7711 a better slider behavior. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7712 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7713 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
|
7714 || (dragging_down_p |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7715 && 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
|
7716 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7717 part = scroll_bar_down_arrow; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7718 bar->dragging = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7719 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7720 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7721 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7722 whole = XM_SB_RANGE; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7723 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
|
7724 part = scroll_bar_handle; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7725 bar->dragging = make_number (cs->value); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7726 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7727 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7728 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7729 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7730 case XmCR_VALUE_CHANGED: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7731 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7732 }; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7733 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7734 if (part >= 0) |
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 window_being_scrolled = bar->window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7737 last_scroll_bar_part = part; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7738 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
|
7739 } |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7742 |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7743 #else /* !USE_MOTIF, i.e. Xaw. */ |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7744 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7745 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7746 /* 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
|
7747 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
|
7748 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
|
7749 the thumb is. */ |
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 static void |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7752 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
|
7753 Widget widget; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7754 XtPointer client_data, call_data; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7755 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7756 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
|
7757 float top = *(float *) call_data; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7758 float shown; |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7759 int whole, portion, height; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7760 int part; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7761 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7762 /* 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
|
7763 BLOCK_INPUT; |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7764 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
|
7765 UNBLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7766 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7767 whole = 10000000; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7768 portion = shown < 1 ? top * whole : 0; |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7769 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7770 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
|
7771 /* 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
|
7772 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
|
7773 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
|
7774 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
|
7775 bottom). */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7776 part = scroll_bar_down_arrow; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7777 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7778 part = scroll_bar_handle; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7779 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7780 window_being_scrolled = bar->window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7781 bar->dragging = make_number (portion); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7782 last_scroll_bar_part = part; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7783 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
|
7784 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7785 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7786 |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7787 /* 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
|
7788 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
|
7789 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
|
7790 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
|
7791 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
|
7792 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
|
7793 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
|
7794 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7795 static void |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7796 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
|
7797 Widget widget; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7798 XtPointer client_data, call_data; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7799 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7800 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
|
7801 int position = (int) call_data; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7802 Dimension height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7803 int part; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7804 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7805 /* 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
|
7806 BLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7807 XtVaGetValues (widget, XtNheight, &height, NULL); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7808 UNBLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7809 |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7810 if (abs (position) >= height) |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7811 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
|
7812 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7813 /* If Xaw3d was compiled with ARROW_SCROLLBAR, |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7814 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
|
7815 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
|
7816 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
|
7817 else |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7818 part = scroll_bar_move_ratio; |
24991
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 window_being_scrolled = bar->window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7821 bar->dragging = Qnil; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7822 last_scroll_bar_part = part; |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7823 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
|
7824 } |
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 #endif /* not USE_MOTIF */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7828 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7829 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7830 /* 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
|
7831 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
|
7832 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7833 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7834 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
|
7835 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7836 struct scroll_bar *bar; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7837 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7838 Window xwindow; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7839 Widget widget; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7840 Arg av[20]; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7841 int ac = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7842 char *scroll_bar_name = "verticalScrollBar"; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7843 unsigned long pixel; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7844 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7845 BLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7846 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7847 #ifdef USE_MOTIF |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7848 /* LessTif 0.85, problems: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7849 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7850 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
|
7851 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
|
7852 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7853 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
|
7854 cursor (see below)? */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7855 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7856 /* Set resources. Create the widget. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7857 XtSetArg (av[ac], XtNmappedWhenManaged, False); ++ac; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7858 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
|
7859 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
|
7860 XtSetArg (av[ac], XmNorientation, XmVERTICAL); ++ac; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7861 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
|
7862 XtSetArg (av[ac], XmNincrement, 1); ++ac; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7863 XtSetArg (av[ac], XmNpageIncrement, 1); ++ac; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7864 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7865 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
|
7866 if (pixel != -1) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7867 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7868 XtSetArg (av[ac], XmNforeground, pixel); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7869 ++ac; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7870 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7871 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7872 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
|
7873 if (pixel != -1) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7874 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7875 XtSetArg (av[ac], XmNbackground, pixel); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7876 ++ac; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7877 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7878 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7879 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
|
7880 scroll_bar_name, av, ac); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7881 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7882 /* 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
|
7883 XtAddCallback (widget, XmNdecrementCallback, xm_scroll_callback, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7884 (XtPointer) bar); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7885 XtAddCallback (widget, XmNdragCallback, xm_scroll_callback, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7886 (XtPointer) bar); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7887 XtAddCallback (widget, XmNincrementCallback, xm_scroll_callback, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7888 (XtPointer) bar); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7889 XtAddCallback (widget, XmNpageDecrementCallback, xm_scroll_callback, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7890 (XtPointer) bar); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7891 XtAddCallback (widget, XmNpageIncrementCallback, xm_scroll_callback, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7892 (XtPointer) bar); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7893 XtAddCallback (widget, XmNtoBottomCallback, xm_scroll_callback, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7894 (XtPointer) bar); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7895 XtAddCallback (widget, XmNtoTopCallback, xm_scroll_callback, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7896 (XtPointer) bar); |
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 /* 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
|
7899 XtRealizeWidget (widget); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7900 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7901 /* 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
|
7902 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
|
7903 XDefineCursor (XtDisplay (widget), XtWindow (widget), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7904 f->output_data.x->nontext_cursor); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7905 |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7906 #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
|
7907 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7908 /* 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
|
7909 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
|
7910 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
|
7911 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
|
7912 XtSetArg (av[ac], XtNmappedWhenManaged, False); ++ac; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7913 XtSetArg (av[ac], XtNorientation, XtorientVertical); ++ac; |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7914 /* For smoother scrolling with Xaw3d -sm */ |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7915 /* XtSetArg (av[ac], XtNpickTop, True); ++ac; */ |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7916 /* 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
|
7917 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7918 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
|
7919 if (pixel != -1) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7920 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7921 XtSetArg (av[ac], XtNforeground, pixel); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7922 ++ac; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7923 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7924 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7925 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
|
7926 if (pixel != -1) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7927 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7928 XtSetArg (av[ac], XtNbackground, pixel); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7929 ++ac; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7930 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7931 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7932 widget = XtCreateWidget (scroll_bar_name, scrollbarWidgetClass, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7933 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
|
7934 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7935 { |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7936 char *initial = ""; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7937 char *val = initial; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7938 XtVaGetValues (widget, XtNscrollVCursor, (XtPointer) &val, |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7939 XtNpickTop, (XtPointer) &xaw3d_pick_top, NULL); |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7940 if (val == initial) |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7941 { /* ARROW_SCROLL */ |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7942 xaw3d_arrow_scroll = True; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7943 /* 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
|
7944 XtVaSetValues (widget, XtNcursorName, "top_left_arrow", NULL); |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7945 } |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7946 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7947 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7948 /* Define callbacks. */ |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7949 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
|
7950 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
|
7951 (XtPointer) bar); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7952 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7953 /* 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
|
7954 XtRealizeWidget (widget); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7955 |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
7956 #endif /* !USE_MOTIF */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7957 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7958 /* 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
|
7959 finishes interacting with a scroll bar. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7960 if (action_hook_id == 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7961 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
|
7962 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7963 /* 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
|
7964 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
|
7965 xwindow = XtWindow (widget); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7966 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
|
7967 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7968 UNBLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7969 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7970 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7971 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7972 /* 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
|
7973 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
|
7974 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7975 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7976 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
|
7977 struct scroll_bar *bar; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7978 int portion, position, whole; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7979 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7980 float top, shown; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7981 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
|
7982 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7983 if (whole == 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7984 top = 0, shown = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7985 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7986 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7987 top = (float) position / whole; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7988 shown = (float) portion / whole; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7989 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7990 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7991 BLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7992 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7993 #ifdef USE_MOTIF |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7994 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7995 int size, value; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7996 Boolean arrow1_selected, arrow2_selected; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7997 unsigned char flags; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7998 XmScrollBarWidget sb; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7999 |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
8000 /* 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
|
8001 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
|
8002 value. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8003 size = shown * XM_SB_RANGE; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8004 size = min (size, XM_SB_RANGE); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8005 size = max (size, 1); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8006 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8007 /* 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
|
8008 value = top * XM_SB_RANGE; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8009 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
|
8010 value = max (value, XM_SB_MIN); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8011 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8012 /* 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
|
8013 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
|
8014 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
|
8015 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
|
8016 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
|
8017 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
|
8018 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8019 sb = (XmScrollBarWidget) widget; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8020 arrow1_selected = sb->scrollBar.arrow1_selected; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8021 arrow2_selected = sb->scrollBar.arrow2_selected; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8022 flags = sb->scrollBar.flags; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8023 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8024 if (NILP (bar->dragging)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8025 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
|
8026 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
|
8027 /* 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
|
8028 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
|
8029 page-wise movement. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8030 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
|
8031 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8032 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8033 /* 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
|
8034 This reduces flicker effects. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8035 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
|
8036 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8037 XmScrollBarGetValues (widget, &old_value, &old_size, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8038 &increment, &page_increment); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8039 XmScrollBarSetValues (widget, old_value, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8040 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
|
8041 0, 0, False); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8042 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8043 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8044 sb->scrollBar.arrow1_selected = arrow1_selected; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8045 sb->scrollBar.arrow2_selected = arrow2_selected; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8046 sb->scrollBar.flags = flags; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8047 } |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
8048 #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
|
8049 { |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
8050 float old_top, old_shown; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
8051 Dimension height; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
8052 XtVaGetValues (widget, |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
8053 XtNtopOfThumb, &old_top, |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
8054 XtNshown, &old_shown, |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
8055 XtNheight, &height, |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
8056 NULL); |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
8057 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
8058 /* Massage the top+shown values. */ |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
8059 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
|
8060 top = max (0, min (1, top)); |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
8061 else |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
8062 top = old_top; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
8063 /* 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
|
8064 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
|
8065 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8066 /* 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
|
8067 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
|
8068 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
|
8069 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
|
8070 { |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
8071 if (NILP (bar->dragging)) |
25101
6b42357f28f9
(x_set_toolkit_scroll_bar_thumb): Fix previous change.
Gerd Moellmann <gerd@gnu.org>
parents:
25091
diff
changeset
|
8072 XawScrollbarSetThumb (widget, top, shown); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8073 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8074 { |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
8075 #ifdef HAVE_XAW3D |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
8076 ScrollbarWidget sb = (ScrollbarWidget) widget; |
29600
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
8077 int scroll_mode = 0; |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
8078 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
8079 /* `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
|
8080 if (xaw3d_arrow_scroll) |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
8081 { |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
8082 /* Xaw3d stupidly ignores resize requests while dragging |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
8083 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
|
8084 scroll_mode = sb->scrollbar.scroll_mode; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
8085 if (scroll_mode == 2) |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
8086 sb->scrollbar.scroll_mode = 0; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
8087 } |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
8088 #endif |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
8089 /* 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
|
8090 if (!xaw3d_pick_top) |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
8091 shown = min (shown, old_shown); |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
8092 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
8093 XawScrollbarSetThumb (widget, top, shown); |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
8094 |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
8095 #ifdef HAVE_XAW3D |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
8096 if (xaw3d_arrow_scroll && scroll_mode == 2) |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
8097 sb->scrollbar.scroll_mode = scroll_mode; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
8098 #endif |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8099 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8100 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8101 } |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
8102 #endif /* !USE_MOTIF */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8103 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8104 UNBLOCK_INPUT; |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8107 #endif /* USE_TOOLKIT_SCROLL_BARS */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8108 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8109 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8110 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8111 /************************************************************************ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8112 Scroll bars, general |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8113 ************************************************************************/ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8114 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8115 /* 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
|
8116 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
|
8117 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
|
8118 scroll bar. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8119 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8120 static struct scroll_bar * |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8121 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
|
8122 struct window *w; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8123 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
|
8124 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8125 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
|
8126 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
|
8127 = 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
|
8128 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8129 BLOCK_INPUT; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8130 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8131 #if USE_TOOLKIT_SCROLL_BARS |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8132 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
|
8133 #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
|
8134 { |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8135 XSetWindowAttributes a; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8136 unsigned long mask; |
25716
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
8137 Window window; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8138 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8139 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
|
8140 if (a.background_pixel == -1) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8141 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
|
8142 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8143 a.event_mask = (ButtonPressMask | ButtonReleaseMask |
1793
cf4c3f01ddb9
* xterm.c (x_scrollbar_create): Include PointerMotionHintMask in
Jim Blandy <jimb@redhat.com>
parents:
1787
diff
changeset
|
8144 | ButtonMotionMask | PointerMotionHintMask |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8145 | ExposureMask); |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8146 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
|
8147 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
8148 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
|
8149 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8150 /* 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
|
8151 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
|
8152 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
|
8153 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
|
8154 left, top, width, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8155 window_box_height (w), False); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8156 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8157 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
|
8158 /* Position and size of scroll bar. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8159 left + VERTICAL_SCROLL_BAR_WIDTH_TRIM, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8160 top, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8161 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
|
8162 height, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8163 /* Border width, depth, class, and visual. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8164 0, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8165 CopyFromParent, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8166 CopyFromParent, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8167 CopyFromParent, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8168 /* Attributes. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8169 mask, &a); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8170 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
|
8171 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8172 #endif /* not USE_TOOLKIT_SCROLL_BARS */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8173 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8174 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
|
8175 XSETINT (bar->top, top); |
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
8176 XSETINT (bar->left, left); |
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
8177 XSETINT (bar->width, width); |
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
8178 XSETINT (bar->height, height); |
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
8179 XSETINT (bar->start, 0); |
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
8180 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
|
8181 bar->dragging = Qnil; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8182 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8183 /* 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
|
8184 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
|
8185 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
|
8186 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
|
8187 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
|
8188 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
|
8189 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8190 /* Map the window/widget. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8191 #if USE_TOOLKIT_SCROLL_BARS |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8192 XtMapWidget (SCROLL_BAR_X_WIDGET (bar)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8193 XtConfigureWidget (SCROLL_BAR_X_WIDGET (bar), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8194 left + VERTICAL_SCROLL_BAR_WIDTH_TRIM, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8195 top, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8196 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
|
8197 height, 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8198 #else /* not USE_TOOLKIT_SCROLL_BARS */ |
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
8199 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
|
8200 #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
|
8201 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8202 UNBLOCK_INPUT; |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8203 return bar; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8204 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8205 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8206 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8207 /* 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
|
8208 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8209 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
|
8210 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
|
8211 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
|
8212 events.) |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8213 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8214 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
|
8215 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
|
8216 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
|
8217 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
|
8218 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
|
8219 |
25716
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
8220 #ifndef USE_TOOLKIT_SCROLL_BARS |
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
8221 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8222 static void |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8223 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
|
8224 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
|
8225 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
|
8226 int rebuild; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8227 { |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8228 int dragging = ! NILP (bar->dragging); |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8229 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
|
8230 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
|
8231 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
|
8232 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8233 /* 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
|
8234 if (! rebuild |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8235 && 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
|
8236 && 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
|
8237 return; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8238 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8239 BLOCK_INPUT; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8240 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8241 { |
16251
ec1b1ae37295
Pass frame arg in calls to VERTICAL_SCROLL_BAR_INSIDE_HEIGHT
Richard M. Stallman <rms@gnu.org>
parents:
16220
diff
changeset
|
8242 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
|
8243 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
|
8244 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
|
8245 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8246 /* 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
|
8247 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
|
8248 { |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8249 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
|
8250 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8251 if (start < 0) |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8252 start = 0; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8253 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
|
8254 start = top_range; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8255 end = start + length; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8256 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8257 if (end < start) |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8258 end = start; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8259 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
|
8260 end = top_range; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8261 } |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8262 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8263 /* 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
|
8264 XSETINT (bar->start, start); |
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
8265 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
|
8266 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8267 /* 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
|
8268 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
|
8269 end = top_range; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8270 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8271 /* 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
|
8272 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
|
8273 that many pixels tall. */ |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8274 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
|
8275 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8276 /* 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
|
8277 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
|
8278 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
|
8279 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
|
8280 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8281 /* 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
|
8282 VERTICAL_SCROLL_BAR_LEFT_BORDER, |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8283 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
|
8284 inside_width, start, |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8285 False); |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8286 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8287 /* 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
|
8288 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
|
8289 XSetForeground (FRAME_X_DISPLAY (f), gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8290 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
|
8291 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8292 /* 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
|
8293 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
|
8294 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8295 /* x, y, width, height */ |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8296 VERTICAL_SCROLL_BAR_LEFT_BORDER, |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8297 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
|
8298 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
|
8299 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8300 /* 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
|
8301 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
|
8302 XSetForeground (FRAME_X_DISPLAY (f), gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8303 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
|
8304 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8305 /* 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
|
8306 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
|
8307 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
|
8308 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
|
8309 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8310 /* 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
|
8311 VERTICAL_SCROLL_BAR_LEFT_BORDER, |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8312 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
|
8313 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
|
8314 False); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8315 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8316 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8317 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8318 UNBLOCK_INPUT; |
25716
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
8319 } |
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
8320 |
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
8321 #endif /* !USE_TOOLKIT_SCROLL_BARS */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8322 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8323 /* 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
|
8324 nil. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8325 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8326 static void |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8327 x_scroll_bar_remove (bar) |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8328 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
|
8329 { |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8330 BLOCK_INPUT; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8331 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8332 #if USE_TOOLKIT_SCROLL_BARS |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8333 XtDestroyWidget (SCROLL_BAR_X_WIDGET (bar)); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8334 #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
|
8335 { |
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
8336 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
|
8337 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
|
8338 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8339 #endif /* not USE_TOOLKIT_SCROLL_BARS */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8340 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8341 /* 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
|
8342 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
|
8343 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8344 UNBLOCK_INPUT; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8345 } |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8346 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8347 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8348 /* 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
|
8349 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
|
8350 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
|
8351 create one. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8352 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8353 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8354 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
|
8355 struct window *w; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8356 int portion, whole, position; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8357 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8358 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
|
8359 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
|
8360 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
|
8361 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
|
8362 |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8363 /* Get window dimensions. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8364 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
|
8365 top = window_y; |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8366 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
|
8367 height = window_height; |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8368 |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8369 /* 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
|
8370 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
|
8371 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
|
8372 else |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8373 left = XFASTINT (w->left); |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8374 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
|
8375 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
|
8376 |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8377 /* 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
|
8378 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
|
8379 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
|
8380 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
|
8381 else |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8382 sb_width = width; |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8383 |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8384 /* 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
|
8385 #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
|
8386 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
|
8387 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
|
8388 else |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8389 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
|
8390 #else |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8391 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
|
8392 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
|
8393 else |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8394 sb_left = left; |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8395 #endif |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8396 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8397 /* 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
|
8398 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
|
8399 { |
25529
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
8400 BLOCK_INPUT; |
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8401 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
|
8402 left, top, width, height, False); |
25529
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
8403 UNBLOCK_INPUT; |
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8404 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
|
8405 } |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8406 else |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8407 { |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8408 /* 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
|
8409 unsigned int mask = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8410 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8411 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
|
8412 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8413 BLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8414 |
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8415 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
|
8416 mask |= CWX; |
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8417 if (top != XINT (bar->top)) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8418 mask |= CWY; |
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8419 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
|
8420 mask |= CWWidth; |
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8421 if (height != XINT (bar->height)) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8422 mask |= CWHeight; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8423 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8424 #ifdef USE_TOOLKIT_SCROLL_BARS |
25269
621067279f19
(XTset_vertical_scroll_bar) [USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents:
25191
diff
changeset
|
8425 |
621067279f19
(XTset_vertical_scroll_bar) [USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents:
25191
diff
changeset
|
8426 /* 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
|
8427 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
|
8428 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
|
8429 left, top, width, height, False); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8430 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8431 /* Move/size the scroll bar widget. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8432 if (mask) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8433 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
|
8434 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
|
8435 top, |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8436 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
|
8437 height, 0); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8438 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8439 #else /* not USE_TOOLKIT_SCROLL_BARS */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8440 |
25633
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8441 if (VERTICAL_SCROLL_BAR_WIDTH_TRIM) |
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8442 { |
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8443 /* 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
|
8444 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
|
8445 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
|
8446 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
|
8447 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
|
8448 left, top, VERTICAL_SCROLL_BAR_WIDTH_TRIM, |
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8449 height, False); |
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8450 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
|
8451 left + width - VERTICAL_SCROLL_BAR_WIDTH_TRIM, |
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8452 top, VERTICAL_SCROLL_BAR_WIDTH_TRIM, |
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8453 height, False); |
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8454 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8455 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8456 /* Move/size the scroll bar window. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8457 if (mask) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8458 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8459 XWindowChanges wc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8460 |
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8461 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
|
8462 wc.y = top; |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8463 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
|
8464 wc.height = height; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8465 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
|
8466 mask, &wc); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8467 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8468 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8469 #endif /* not USE_TOOLKIT_SCROLL_BARS */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8470 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8471 /* Remember new settings. */ |
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8472 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
|
8473 XSETINT (bar->top, top); |
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8474 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
|
8475 XSETINT (bar->height, height); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8476 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8477 UNBLOCK_INPUT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8478 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8479 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8480 #if USE_TOOLKIT_SCROLL_BARS |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8481 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
|
8482 #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
|
8483 /* 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
|
8484 dragged. */ |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8485 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
|
8486 { |
25541
be975dcf4a0c
(XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents:
25529
diff
changeset
|
8487 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
|
8488 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8489 if (whole == 0) |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8490 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
|
8491 else |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8492 { |
3686
910ea1d66bfd
* xterm.c (XTset_vertical_scroll_bar): Use double type for
Jim Blandy <jimb@redhat.com>
parents:
3683
diff
changeset
|
8493 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
|
8494 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
|
8495 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
|
8496 } |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8497 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8498 #endif /* not USE_TOOLKIT_SCROLL_BARS */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8499 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8500 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
|
8501 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8502 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8503 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8504 /* 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
|
8505 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
|
8506 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
|
8507 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
|
8508 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
|
8509 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
|
8510 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
|
8511 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8512 /* 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
|
8513 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
|
8514 `*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
|
8515 |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
8516 static void |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8517 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
|
8518 FRAME_PTR frame; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8519 { |
13205
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
8520 /* 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
|
8521 while (! NILP (FRAME_SCROLL_BARS (frame))) |
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
8522 { |
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
8523 Lisp_Object bar; |
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
8524 bar = FRAME_SCROLL_BARS (frame); |
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
8525 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
|
8526 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
|
8527 XSCROLL_BAR (bar)->prev = Qnil; |
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
8528 if (! NILP (FRAME_CONDEMNED_SCROLL_BARS (frame))) |
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
8529 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
|
8530 FRAME_CONDEMNED_SCROLL_BARS (frame) = bar; |
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
8531 } |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8532 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8533 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8534 /* 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
|
8535 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
|
8536 static void |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8537 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
|
8538 struct window *window; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8539 { |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8540 struct scroll_bar *bar; |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8541 |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8542 /* 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
|
8543 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
|
8544 abort (); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8545 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8546 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
|
8547 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8548 /* 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
|
8549 { |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8550 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
|
8551 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8552 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
|
8553 { |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8554 /* 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
|
8555 the lists. */ |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8556 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
|
8557 /* 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
|
8558 return; |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8559 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
|
8560 window->vertical_scroll_bar)) |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8561 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
|
8562 else |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8563 /* 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
|
8564 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
|
8565 abort (); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8566 } |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8567 else |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8568 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
|
8569 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8570 if (! NILP (bar->next)) |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8571 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
|
8572 |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8573 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
|
8574 bar->prev = Qnil; |
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
8575 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
|
8576 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
|
8577 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
|
8578 } |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8579 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8580 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8581 /* 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
|
8582 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
|
8583 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8584 static void |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8585 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
|
8586 FRAME_PTR f; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8587 { |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8588 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
|
8589 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8590 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
|
8591 |
5752a95053f2
* xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents:
1793
diff
changeset
|
8592 /* 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
|
8593 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
|
8594 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
|
8595 |
5752a95053f2
* xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents:
1793
diff
changeset
|
8596 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
|
8597 { |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8598 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
|
8599 |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8600 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
|
8601 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8602 next = b->next; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8603 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
|
8604 } |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8605 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8606 /* 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
|
8607 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
|
8608 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8609 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8610 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8611 /* 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
|
8612 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
|
8613 |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8614 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
|
8615 mark bits. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8616 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8617 static void |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8618 x_scroll_bar_expose (bar, event) |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8619 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
|
8620 XEvent *event; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8621 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8622 #ifndef USE_TOOLKIT_SCROLL_BARS |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8623 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8624 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
|
8625 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
|
8626 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
|
8627 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
|
8628 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8629 BLOCK_INPUT; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8630 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8631 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
|
8632 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8633 /* 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
|
8634 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
|
8635 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8636 /* 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
|
8637 0, 0, |
16301
a02555b4b2b9
(x_scroll_bar_create, x_scroll_bar_move):
Richard M. Stallman <rms@gnu.org>
parents:
16251
diff
changeset
|
8638 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
|
8639 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
|
8640 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8641 UNBLOCK_INPUT; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8642 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8643 #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
|
8644 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8645 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8646 /* 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
|
8647 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
|
8648 |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8649 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
|
8650 mark bits. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8651 |
25716
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
8652 #ifndef USE_TOOLKIT_SCROLL_BARS |
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
8653 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8654 static void |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8655 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
|
8656 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
|
8657 XEvent *event; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8658 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
|
8659 { |
10287
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
8660 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
|
8661 abort (); |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8662 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8663 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
|
8664 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
|
8665 emacs_event->modifiers |
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
8666 = (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
|
8667 (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
|
8668 event->xbutton.state) |
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
8669 | (event->type == ButtonRelease |
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
8670 ? up_modifier |
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
8671 : down_modifier)); |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8672 emacs_event->frame_or_window = bar->window; |
30197
3237a5529020
(construct_mouse_click, x_scroll_bar_to_input_event)
Gerd Moellmann <gerd@gnu.org>
parents:
30182
diff
changeset
|
8673 emacs_event->arg = Qnil; |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8674 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
|
8675 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8676 #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
|
8677 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
|
8678 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
|
8679 = 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
|
8680 #endif |
10287
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
8681 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
|
8682 = 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
|
8683 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
|
8684 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8685 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
|
8686 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
|
8687 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8688 if (y < XINT (bar->start)) |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8689 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
|
8690 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
|
8691 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
|
8692 else |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8693 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
|
8694 |
5440f00480e6
* xterm.c (x_scroll_bar_handle_click): Never grab the scroll bar;
Jim Blandy <jimb@redhat.com>
parents:
2923
diff
changeset
|
8695 /* 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
|
8696 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
|
8697 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
|
8698 #if 0 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8699 /* 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
|
8700 holding it. */ |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8701 if (event->type == ButtonPress |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8702 && 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
|
8703 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
|
8704 #endif |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8705 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8706 /* 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
|
8707 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
|
8708 && ! NILP (bar->dragging)) |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8709 { |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8710 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
|
8711 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
|
8712 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8713 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
|
8714 bar->dragging = Qnil; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8715 } |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8716 |
2958
3124e6244d1a
* xterm.c (x_scroll_bar_handle_click): Never grab the scroll bar;
Jim Blandy <jimb@redhat.com>
parents:
2953
diff
changeset
|
8717 /* 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
|
8718 #if 0 |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
8719 /* 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
|
8720 the handle. */ |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8721 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
|
8722 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
|
8723 else |
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
8724 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
|
8725 #else |
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
8726 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
|
8727 #endif |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8728 |
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
8729 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
|
8730 } |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8731 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8732 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8733 /* 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
|
8734 |
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8735 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
|
8736 mark bits. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8737 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8738 static void |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8739 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
|
8740 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
|
8741 XEvent *event; |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8742 { |
12530
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
8743 FRAME_PTR f = XFRAME (XWINDOW (bar->window)->frame); |
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
8744 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8745 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
|
8746 |
12530
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
8747 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
|
8748 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
|
8749 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8750 /* 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
|
8751 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
|
8752 { |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8753 /* 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
|
8754 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
|
8755 |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8756 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
|
8757 { |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8758 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
|
8759 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8760 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
|
8761 } |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8762 } |
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 |
25716
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
8765 #endif /* !USE_TOOLKIT_SCROLL_BARS */ |
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
8766 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8767 /* 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
|
8768 on the scroll bar. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8769 |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8770 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
|
8771 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
|
8772 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
|
8773 Lisp_Object *bar_window; |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8774 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
|
8775 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
|
8776 unsigned long *time; |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8777 { |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8778 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
|
8779 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
|
8780 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
|
8781 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
|
8782 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
|
8783 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
|
8784 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
|
8785 |
1803
5752a95053f2
* xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents:
1793
diff
changeset
|
8786 BLOCK_INPUT; |
5752a95053f2
* xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents:
1793
diff
changeset
|
8787 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8788 /* 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
|
8789 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
|
8790 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
|
8791 |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8792 /* 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
|
8793 &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
|
8794 &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
|
8795 |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8796 /* 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
|
8797 &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
|
8798 |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8799 /* 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
|
8800 &dummy_mask)) |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8801 ; |
2982
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8802 else |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8803 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8804 #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
|
8805 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
|
8806 = 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
|
8807 #endif |
2982
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8808 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
|
8809 = 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
|
8810 |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8811 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
|
8812 |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8813 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
|
8814 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
|
8815 |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8816 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
|
8817 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
|
8818 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
|
8819 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
|
8820 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
8821 *fp = f; |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8822 *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
|
8823 |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8824 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
|
8825 *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
|
8826 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
|
8827 *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
|
8828 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
|
8829 *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
|
8830 else |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8831 *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
|
8832 |
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
8833 XSETINT (*x, win_y); |
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
8834 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
|
8835 |
12530
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
8836 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
|
8837 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
|
8838 } |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8839 |
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8840 *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
|
8841 |
1803
5752a95053f2
* xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents:
1793
diff
changeset
|
8842 UNBLOCK_INPUT; |
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8843 } |
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8844 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8845 |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
8846 /* 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
|
8847 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
|
8848 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
|
8849 redraw them. */ |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
8850 |
21514 | 8851 void |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8852 x_scroll_bar_clear (f) |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
8853 FRAME_PTR f; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
8854 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8855 #ifndef USE_TOOLKIT_SCROLL_BARS |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
8856 Lisp_Object bar; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
8857 |
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
|
8858 /* 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
|
8859 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
|
8860 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
|
8861 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
|
8862 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
|
8863 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
|
8864 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
|
8865 0, 0, 0, 0, True); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8866 #endif /* not USE_TOOLKIT_SCROLL_BARS */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8867 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8868 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8869 /* 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
|
8870 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
|
8871 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
|
8872 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8873 int |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8874 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
|
8875 XEvent event; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8876 { |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8877 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
|
8878 struct x_display_info *dpyinfo; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8879 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
|
8880 |
5872
6389c826f847
(x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents:
5825
diff
changeset
|
8881 BLOCK_INPUT; |
6389c826f847
(x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents:
5825
diff
changeset
|
8882 |
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
|
8883 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
|
8884 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
|
8885 if (f) |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8886 { |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8887 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
|
8888 { |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8889 f->async_visible = 1; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8890 f->async_iconified = 0; |
18074
06e42aa4c208
(process_expose_from_menu, XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents:
18057
diff
changeset
|
8891 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
|
8892 SET_FRAME_GARBAGED (f); |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8893 } |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8894 else |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8895 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8896 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
|
8897 event.xexpose.x, event.xexpose.y, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8898 event.xexpose.width, event.xexpose.height); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8899 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
|
8900 } |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8901 } |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8902 else |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8903 { |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8904 struct scroll_bar *bar |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8905 = x_window_to_scroll_bar (event.xexpose.window); |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
8906 |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8907 if (bar) |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8908 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
|
8909 } |
5872
6389c826f847
(x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents:
5825
diff
changeset
|
8910 |
6389c826f847
(x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents:
5825
diff
changeset
|
8911 UNBLOCK_INPUT; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8912 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
|
8913 } |
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8914 |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8915 /* 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
|
8916 |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8917 struct selection_event_queue |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8918 { |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8919 XEvent event; |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8920 struct selection_event_queue *next; |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8921 }; |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8922 |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8923 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
|
8924 |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8925 /* 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
|
8926 |
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8927 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
|
8928 |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8929 /* 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
|
8930 |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8931 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
|
8932 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
|
8933 FRAME_PTR f; |
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8934 XEvent *event; |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8935 { |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8936 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
|
8937 = (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
|
8938 |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
8939 if (queue_tmp != NULL) |
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8940 { |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8941 queue_tmp->event = *event; |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8942 queue_tmp->next = queue; |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8943 queue = queue_tmp; |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8944 } |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8945 } |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8946 |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8947 /* 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
|
8948 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
|
8949 |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8950 static void |
10634
de7beeb9f02c
(x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents:
10609
diff
changeset
|
8951 x_unqueue_events (display) |
de7beeb9f02c
(x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents:
10609
diff
changeset
|
8952 Display *display; |
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8953 { |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
8954 while (queue != NULL) |
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8955 { |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8956 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
|
8957 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
|
8958 queue = queue_tmp->next; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8959 xfree ((char *)queue_tmp); |
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8960 } |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8961 } |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8962 |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8963 /* Start queuing SelectionRequest events. */ |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8964 |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8965 void |
10634
de7beeb9f02c
(x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents:
10609
diff
changeset
|
8966 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
|
8967 Display *display; |
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8968 { |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8969 x_queue_selection_requests++; |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8970 } |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8971 |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8972 /* Stop queuing SelectionRequest events. */ |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8973 |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8974 void |
10634
de7beeb9f02c
(x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents:
10609
diff
changeset
|
8975 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
|
8976 Display *display; |
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8977 { |
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8978 x_queue_selection_requests--; |
10634
de7beeb9f02c
(x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents:
10609
diff
changeset
|
8979 x_unqueue_events (display); |
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8980 } |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8981 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8982 /* The main X event-reading loop - XTread_socket. */ |
286 | 8983 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8984 /* Time stamp of enter window event. This is only used by XTread_socket, |
286 | 8985 but we have to put it out here, since static variables within functions |
8986 sometimes don't work. */ | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8987 |
286 | 8988 static Time enter_timestamp; |
8989 | |
1436
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
8990 /* 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
|
8991 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
|
8992 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
|
8993 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
|
8994 |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
8995 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
|
8996 given for enter_time stamp, above. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8997 |
1436
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
8998 static XComposeStatus compose_status; |
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
8999 |
2064 | 9000 /* Record the last 100 characters stored |
9001 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
|
9002 |
12657
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9003 static int temp_index; |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9004 static short temp_buffer[100]; |
2064 | 9005 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9006 /* 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
|
9007 on a particular display. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9008 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9009 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
|
9010 |
12657
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9011 /* 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
|
9012 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
|
9013 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
|
9014 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
|
9015 |
12657
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9016 static struct x_display_info *next_noop_dpyinfo; |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9017 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9018 #define SET_SAVED_MENU_EVENT(size) \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9019 do \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9020 { \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9021 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
|
9022 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
|
9023 = (XEvent *) xmalloc (sizeof (XEvent)); \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9024 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
|
9025 if (numchars >= 1) \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9026 { \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9027 bufp->kind = menu_bar_activate_event; \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9028 XSETFRAME (bufp->frame_or_window, f); \ |
30197
3237a5529020
(construct_mouse_click, x_scroll_bar_to_input_event)
Gerd Moellmann <gerd@gnu.org>
parents:
30182
diff
changeset
|
9029 bufp->arg = Qnil; \ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9030 bufp++; \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9031 count++; \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9032 numchars--; \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9033 } \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9034 } \ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9035 while (0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9036 |
15711
099dc465c948
(SET_SAVED_MENU_EVENT): New macro.
Karl Heuer <kwzh@gnu.org>
parents:
15639
diff
changeset
|
9037 #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
|
9038 #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
|
9039 |
286 | 9040 /* Read events coming from the X server. |
9041 This routine is called by the SIGIO handler. | |
9042 We return as soon as there are no more events to be read. | |
9043 | |
9044 Events representing keys are stored in buffer BUFP, | |
9045 which can hold up to NUMCHARS characters. | |
9046 We return the number of characters stored into the buffer, | |
9047 thus pretending to be `read'. | |
9048 | |
9049 EXPECTED is nonzero if the caller knows input is available. */ | |
9050 | |
1530
a7f8a1fe258e
* xterm.c (x_convert_modifiers): Declare this to return an
Jim Blandy <jimb@redhat.com>
parents:
1436
diff
changeset
|
9051 int |
16330
e4d9d77012bc
(XTread_socket): Delete WAITP arg.
Richard M. Stallman <rms@gnu.org>
parents:
16301
diff
changeset
|
9052 XTread_socket (sd, bufp, numchars, expected) |
286 | 9053 register int sd; |
15711
099dc465c948
(SET_SAVED_MENU_EVENT): New macro.
Karl Heuer <kwzh@gnu.org>
parents:
15639
diff
changeset
|
9054 /* register */ struct input_event *bufp; |
099dc465c948
(SET_SAVED_MENU_EVENT): New macro.
Karl Heuer <kwzh@gnu.org>
parents:
15639
diff
changeset
|
9055 /* register */ int numchars; |
286 | 9056 int expected; |
9057 { | |
9058 int count = 0; | |
9059 int nbytes = 0; | |
9060 XEvent event; | |
771 | 9061 struct frame *f; |
3938
83d870a52936
* xterm.c (XTread_socket): Initialize event_found to zero, and
Jim Blandy <jimb@redhat.com>
parents:
3924
diff
changeset
|
9062 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
|
9063 struct x_display_info *dpyinfo; |
30748 | 9064 struct coding_system coding; |
286 | 9065 |
2439
b6c62e4abf59
Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents:
2353
diff
changeset
|
9066 if (interrupt_input_blocked) |
286 | 9067 { |
2439
b6c62e4abf59
Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents:
2353
diff
changeset
|
9068 interrupt_input_pending = 1; |
286 | 9069 return -1; |
9070 } | |
9071 | |
2439
b6c62e4abf59
Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents:
2353
diff
changeset
|
9072 interrupt_input_pending = 0; |
286 | 9073 BLOCK_INPUT; |
9337
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
9074 |
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
9075 /* 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
|
9076 input_signal_count++; |
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
9077 |
286 | 9078 if (numchars <= 0) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9079 abort (); /* Don't think this happens. */ |
286 | 9080 |
30083
998d20abc885
(XTread_socket): Increment handling_signal at the start,
Gerd Moellmann <gerd@gnu.org>
parents:
30050
diff
changeset
|
9081 ++handling_signal; |
998d20abc885
(XTread_socket): Increment handling_signal at the start,
Gerd Moellmann <gerd@gnu.org>
parents:
30050
diff
changeset
|
9082 |
30748 | 9083 /* The input should be decoded if it is from XIM. Currently the |
9084 locale of XIM is the same as that of the system. So, we can use | |
9085 Vlocale_coding_system which is initialized properly at Emacs | |
9086 startup time. */ | |
9087 setup_coding_system (Vlocale_coding_system, &coding); | |
9088 coding.src_multibyte = 0; | |
9089 coding.dst_multibyte = 1; | |
9090 /* The input is converted to events, thus we can't handle | |
9091 composition. Anyway, there's no XIM that gives us composition | |
9092 information. */ | |
9093 coding.composing = COMPOSITION_DISABLED; | |
9094 | |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9095 /* 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
|
9096 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
|
9097 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
|
9098 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9099 #if 0 /* This ought to be unnecessary; let's verify it. */ |
286 | 9100 #ifdef FIOSNBIO |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9101 /* 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
|
9102 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
|
9103 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
|
9104 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
|
9105 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
|
9106 #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
|
9107 #endif |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9108 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9109 #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
|
9110 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
|
9111 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
|
9112 for X connections. */ |
286 | 9113 #ifndef SIGIO |
9114 #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
|
9115 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
|
9116 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9117 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
|
9118 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
|
9119 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
|
9120 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
|
9121 } |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
9122 #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
|
9123 #endif /* SIGIO */ |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9124 #endif |
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 /* 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
|
9127 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
|
9128 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9129 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
|
9130 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
|
9131 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9132 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9133 while (XPending (dpyinfo->display)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9134 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9135 XNextEvent (dpyinfo->display, &event); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9136 |
15973
6ad9e8fee494
(XTread_socket): Call XFilterEvent on all events,
Richard M. Stallman <rms@gnu.org>
parents:
15928
diff
changeset
|
9137 #ifdef HAVE_X_I18N |
15990
1185f8fc0bfb
(do_line_dance, dumprectangle): Use x_update_cursor.
Richard M. Stallman <rms@gnu.org>
parents:
15973
diff
changeset
|
9138 { |
26968
3039d2412c9e
(XTread_socket): At the beginning of the loop, pass the
Gerd Moellmann <gerd@gnu.org>
parents:
26912
diff
changeset
|
9139 /* 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
|
9140 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
|
9141 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
|
9142 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
|
9143 was created. */ |
27500
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
9144 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
|
9145 event.xclient.window); |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
9146 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
|
9147 break; |
1185f8fc0bfb
(do_line_dance, dumprectangle): Use x_update_cursor.
Richard M. Stallman <rms@gnu.org>
parents:
15973
diff
changeset
|
9148 } |
15973
6ad9e8fee494
(XTread_socket): Call XFilterEvent on all events,
Richard M. Stallman <rms@gnu.org>
parents:
15928
diff
changeset
|
9149 #endif |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9150 event_found = 1; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9151 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9152 switch (event.type) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9153 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9154 case ClientMessage: |
642 | 9155 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9156 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
|
9157 == 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
|
9158 && event.xclient.format == 32) |
642 | 9159 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9160 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
|
9161 == 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
|
9162 { |
18885
f7b6579204b8
(XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents:
18775
diff
changeset
|
9163 /* Use x_any_window_to_frame because this |
f7b6579204b8
(XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents:
18775
diff
changeset
|
9164 could be the shell widget window |
f7b6579204b8
(XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents:
18775
diff
changeset
|
9165 if the frame has no title bar. */ |
f7b6579204b8
(XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents:
18775
diff
changeset
|
9166 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
|
9167 #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
|
9168 /* Not quite sure this is needed -pd */ |
18885
f7b6579204b8
(XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents:
18775
diff
changeset
|
9169 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
|
9170 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
|
9171 #endif |
25921
eb5839cbfb16
(XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents:
25795
diff
changeset
|
9172 #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
|
9173 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
|
9174 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
|
9175 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
|
9176 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
|
9177 needed. |
eb5839cbfb16
(XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents:
25795
diff
changeset
|
9178 |
eb5839cbfb16
(XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents:
25795
diff
changeset
|
9179 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
|
9180 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
|
9181 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
|
9182 below can generate additional FocusIn events which confuse |
eb5839cbfb16
(XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents:
25795
diff
changeset
|
9183 Emacs. */ |
eb5839cbfb16
(XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents:
25795
diff
changeset
|
9184 |
18996
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
9185 /* 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
|
9186 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
|
9187 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
|
9188 if (f) |
18996
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
9189 { |
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
9190 Display *d = event.xclient.display; |
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
9191 /* 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
|
9192 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
|
9193 int count = x_catch_errors (d); |
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
9194 XSetInputFocus (d, event.xclient.window, |
25633
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
9195 /* The ICCCM says this is |
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
9196 the only valid choice. */ |
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
9197 RevertToParent, |
18996
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
9198 event.xclient.data.l[1]); |
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
9199 /* 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
|
9200 if there is an error. */ |
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
9201 XSync (d, False); |
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
9202 x_uncatch_errors (d, count); |
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
9203 } |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9204 /* Not certain about handling scroll bars here */ |
25921
eb5839cbfb16
(XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents:
25795
diff
changeset
|
9205 #endif /* 0 */ |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9206 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9207 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
|
9208 == dpyinfo->Xatom_wm_save_yourself) |
642 | 9209 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9210 /* 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
|
9211 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
|
9212 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
|
9213 PropertyNotify. Can restart processing when |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9214 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
|
9215 if (numchars > 0) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9216 { |
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
|
9217 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
|
9218 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
|
9219 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9220 /* 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
|
9221 for a single Emacs process. */ |
25682
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
9222 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
|
9223 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
|
9224 event.xclient.window, |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9225 initial_argv, initial_argc); |
15519
045a36502ad4
(XTread_socket, Xatom_wm_save_yourself clause):
Richard M. Stallman <rms@gnu.org>
parents:
15515
diff
changeset
|
9226 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
|
9227 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
|
9228 event.xclient.window, |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9229 0, 0); |
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 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9232 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
|
9233 == 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
|
9234 { |
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
|
9235 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
|
9236 = 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
|
9237 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
|
9238 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9239 if (f) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9240 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9241 if (numchars == 0) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9242 abort (); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9243 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9244 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
|
9245 XSETFRAME (bufp->frame_or_window, f); |
30197
3237a5529020
(construct_mouse_click, x_scroll_bar_to_input_event)
Gerd Moellmann <gerd@gnu.org>
parents:
30182
diff
changeset
|
9246 bufp->arg = Qnil; |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9247 bufp++; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9248 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9249 count += 1; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9250 numchars -= 1; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9251 } |
642 | 9252 } |
9253 } | |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9254 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
|
9255 == dpyinfo->Xatom_wm_configure_denied) |
642 | 9256 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9257 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9258 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
|
9259 == 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
|
9260 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9261 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
|
9262 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
|
9263 = 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
|
9264 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9265 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
|
9266 new_y = event.xclient.data.s[1]; |
771 | 9267 |
9268 if (f) | |
5156
fd78458b8c43
(XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents:
5018
diff
changeset
|
9269 { |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
9270 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
|
9271 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
|
9272 } |
642 | 9273 } |
13507
9a9f459075af
(HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents:
13363
diff
changeset
|
9274 #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
|
9275 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
|
9276 == dpyinfo->Xatom_editres) |
5156
fd78458b8c43
(XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents:
5018
diff
changeset
|
9277 { |
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
|
9278 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
|
9279 = 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
|
9280 _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
|
9281 &event, NULL); |
5156
fd78458b8c43
(XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents:
5018
diff
changeset
|
9282 } |
13507
9a9f459075af
(HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents:
13363
diff
changeset
|
9283 #endif /* HACK_EDITRES */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9284 else if ((event.xclient.message_type |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9285 == dpyinfo->Xatom_DONE) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9286 || (event.xclient.message_type |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9287 == dpyinfo->Xatom_PAGE)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9288 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9289 /* 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
|
9290 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
|
9291 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
|
9292 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
|
9293 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
|
9294 struct frame *f |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9295 = 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
|
9296 x_kill_gs_process (pixmap, f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9297 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
|
9298 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9299 #ifdef USE_TOOLKIT_SCROLL_BARS |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9300 /* 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
|
9301 we construct an input_event. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9302 else if (event.xclient.message_type |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9303 == dpyinfo->Xatom_Scrollbar) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9304 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9305 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
|
9306 ++bufp, ++count, --numchars; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9307 goto out; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9308 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9309 #endif /* USE_TOOLKIT_SCROLL_BARS */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9310 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9311 goto OTHER; |
642 | 9312 } |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9313 break; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9314 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9315 case SelectionNotify: |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9316 #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
|
9317 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
|
9318 goto OTHER; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9319 #endif /* not USE_X_TOOLKIT */ |
21514 | 9320 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
|
9321 break; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9322 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9323 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
|
9324 #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
|
9325 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
|
9326 goto OTHER; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9327 #endif /* USE_X_TOOLKIT */ |
6941
a914781ef58a
(Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents:
6934
diff
changeset
|
9328 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9329 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
|
9330 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9331 if (numchars == 0) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9332 abort (); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9333 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9334 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
|
9335 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
|
9336 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
|
9337 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
|
9338 bufp->frame_or_window = Qnil; |
30197
3237a5529020
(construct_mouse_click, x_scroll_bar_to_input_event)
Gerd Moellmann <gerd@gnu.org>
parents:
30182
diff
changeset
|
9339 bufp->arg = Qnil; |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9340 bufp++; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9341 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9342 count += 1; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9343 numchars -= 1; |
6941
a914781ef58a
(Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents:
6934
diff
changeset
|
9344 } |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9345 break; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9346 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9347 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
|
9348 #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
|
9349 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
|
9350 goto OTHER; |
6984
8e9465c13702
(XTread_socket): Delete the non-NEW_SELECTIONS code
Richard M. Stallman <rms@gnu.org>
parents:
6983
diff
changeset
|
9351 #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
|
9352 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
|
9353 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
|
9354 &event); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9355 else |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9356 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9357 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
|
9358 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9359 if (numchars == 0) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9360 abort (); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9361 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9362 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
|
9363 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
|
9364 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
|
9365 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
|
9366 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
|
9367 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
|
9368 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
|
9369 bufp->frame_or_window = Qnil; |
30197
3237a5529020
(construct_mouse_click, x_scroll_bar_to_input_event)
Gerd Moellmann <gerd@gnu.org>
parents:
30182
diff
changeset
|
9370 bufp->arg = Qnil; |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9371 bufp++; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9372 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9373 count += 1; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9374 numchars -= 1; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9375 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9376 break; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9377 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9378 case PropertyNotify: |
6984
8e9465c13702
(XTread_socket): Delete the non-NEW_SELECTIONS code
Richard M. Stallman <rms@gnu.org>
parents:
6983
diff
changeset
|
9379 #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
|
9380 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
|
9381 goto OTHER; |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
9382 #endif /* not USE_X_TOOLKIT */ |
21514 | 9383 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
|
9384 break; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9385 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9386 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
|
9387 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
|
9388 if (f) |
286 | 9389 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9390 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
|
9391 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
|
9392 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
|
9393 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
|
9394 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
|
9395 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9396 break; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9397 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9398 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
|
9399 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
|
9400 if (f) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9401 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9402 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
|
9403 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9404 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
|
9405 f->async_iconified = 0; |
18074
06e42aa4c208
(process_expose_from_menu, XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents:
18057
diff
changeset
|
9406 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
|
9407 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
|
9408 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9409 else |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9410 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
|
9411 event.xexpose.window), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9412 event.xexpose.x, event.xexpose.y, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9413 event.xexpose.width, event.xexpose.height); |
286 | 9414 } |
9415 else | |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9416 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9417 #ifdef USE_TOOLKIT_SCROLL_BARS |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9418 /* Dispatch event to the widget. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9419 goto OTHER; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9420 #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
|
9421 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
|
9422 = 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
|
9423 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9424 if (bar) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9425 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
|
9426 #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
|
9427 else |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9428 goto OTHER; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9429 #endif /* USE_X_TOOLKIT */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9430 #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
|
9431 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9432 break; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9433 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9434 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
|
9435 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
|
9436 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
|
9437 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
|
9438 if (f) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9439 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9440 expose_frame (f, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9441 event.xgraphicsexpose.x, event.xgraphicsexpose.y, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9442 event.xgraphicsexpose.width, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9443 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
|
9444 } |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
9445 #ifdef USE_X_TOOLKIT |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
9446 else |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
9447 goto OTHER; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
9448 #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
|
9449 break; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9450 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9451 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
|
9452 source area was completely |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9453 available */ |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9454 break; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9455 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9456 case UnmapNotify: |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9457 /* 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
|
9458 if (event.xmap.window == tip_window) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9459 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9460 tip_window = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9461 redo_mouse_highlight (); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9462 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9463 |
12750
7e5276da6270
(XTread_socket): For UnmapNotify, use x_top_window_to_frame.
Richard M. Stallman <rms@gnu.org>
parents:
12667
diff
changeset
|
9464 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
|
9465 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
|
9466 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
|
9467 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9468 /* 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
|
9469 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
|
9470 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
|
9471 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
|
9472 /* 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
|
9473 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
|
9474 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
|
9475 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
|
9476 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
|
9477 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
|
9478 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
|
9479 { |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
9480 f->async_iconified = 1; |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
9481 |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
9482 bufp->kind = iconify_event; |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
9483 XSETFRAME (bufp->frame_or_window, f); |
30197
3237a5529020
(construct_mouse_click, x_scroll_bar_to_input_event)
Gerd Moellmann <gerd@gnu.org>
parents:
30182
diff
changeset
|
9484 bufp->arg = Qnil; |
17963
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
9485 bufp++; |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
9486 count++; |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
9487 numchars--; |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
9488 } |
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 goto OTHER; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9491 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9492 case MapNotify: |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9493 if (event.xmap.window == tip_window) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9494 /* 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
|
9495 the SET_FRAME_GARBAGED below. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9496 goto OTHER; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9497 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9498 /* 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
|
9499 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
|
9500 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
|
9501 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
|
9502 if (f) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9503 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9504 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
|
9505 f->async_iconified = 0; |
18074
06e42aa4c208
(process_expose_from_menu, XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents:
18057
diff
changeset
|
9506 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
|
9507 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9508 /* 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
|
9509 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
|
9510 SET_FRAME_GARBAGED (f); |
9823
e6dbda62fd61
(XTread_socket): Generate iconify and deiconify events.
Karl Heuer <kwzh@gnu.org>
parents:
9763
diff
changeset
|
9511 |
11348
e366abc2c753
(XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents:
11259
diff
changeset
|
9512 if (f->iconified) |
e366abc2c753
(XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents:
11259
diff
changeset
|
9513 { |
e366abc2c753
(XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents:
11259
diff
changeset
|
9514 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
|
9515 XSETFRAME (bufp->frame_or_window, f); |
30197
3237a5529020
(construct_mouse_click, x_scroll_bar_to_input_event)
Gerd Moellmann <gerd@gnu.org>
parents:
30182
diff
changeset
|
9516 bufp->arg = Qnil; |
11348
e366abc2c753
(XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents:
11259
diff
changeset
|
9517 bufp++; |
e366abc2c753
(XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents:
11259
diff
changeset
|
9518 count++; |
e366abc2c753
(XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents:
11259
diff
changeset
|
9519 numchars--; |
e366abc2c753
(XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents:
11259
diff
changeset
|
9520 } |
17519
5aa7011aa3d5
(x_set_offset): Turn off the code that added the border_width
Richard M. Stallman <rms@gnu.org>
parents:
17371
diff
changeset
|
9521 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
|
9522 && ! NILP (XCDR (Vframe_list))) |
11921
6ecaa3fac4e4
(XTread_socket): For MapNotify, call record_asynch_buffer_change.
Karl Heuer <kwzh@gnu.org>
parents:
11915
diff
changeset
|
9523 /* 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
|
9524 to update the frame titles |
6ecaa3fac4e4
(XTread_socket): For MapNotify, call record_asynch_buffer_change.
Karl Heuer <kwzh@gnu.org>
parents:
11915
diff
changeset
|
9525 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
|
9526 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
|
9527 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9528 goto OTHER; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9529 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9530 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
|
9531 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
|
9532 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9533 #ifdef USE_MOTIF |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9534 /* 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
|
9535 from consuming key events. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9536 if (f == 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9537 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9538 Widget widget = XtWindowToWidget (dpyinfo->display, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9539 event.xkey.window); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9540 if (widget && XmIsScrollBar (widget)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9541 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9542 widget = XtParent (widget); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9543 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
|
9544 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9545 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9546 #endif /* USE_MOTIF */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9547 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9548 if (f != 0) |
286 | 9549 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9550 KeySym keysym, orig_keysym; |
30748 | 9551 /* al%imercury@uunet.uu.net says that making this 81 |
9552 instead of 80 fixed a bug whereby meta chars made | |
9553 his Emacs hang. | |
9554 | |
9555 It seems that some version of XmbLookupString has | |
9556 a bug of not returning XBufferOverflow in | |
9557 status_return even if the input is too long to | |
9558 fit in 81 bytes. So, we must prepare sufficient | |
9559 bytes for copy_buffer. 513 bytes (256 chars for | |
9560 two-byte character set) seems to be a faily good | |
9561 approximation. -- 2000.8.10 handa@etl.go.jp */ | |
9562 unsigned char copy_buffer[513]; | |
9563 unsigned char *copy_bufptr = copy_buffer; | |
9564 int copy_bufsiz = sizeof (copy_buffer); | |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9565 int modifiers; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9566 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9567 event.xkey.state |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9568 |= 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
|
9569 extra_keyboard_modifiers); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9570 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
|
9571 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9572 /* 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
|
9573 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9574 /* 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
|
9575 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
|
9576 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
|
9577 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
|
9578 | 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
|
9579 | 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
|
9580 | 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
|
9581 |
16483
1b53fdb98184
(XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents:
16430
diff
changeset
|
9582 /* In case Meta is ComposeCharacter, |
1b53fdb98184
(XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents:
16430
diff
changeset
|
9583 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
|
9584 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
|
9585 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
|
9586 not it is combined with Meta. */ |
1b53fdb98184
(XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents:
16430
diff
changeset
|
9587 if (modifiers & dpyinfo->meta_mod_mask) |
1b53fdb98184
(XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents:
16430
diff
changeset
|
9588 bzero (&compose_status, sizeof (compose_status)); |
1b53fdb98184
(XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents:
16430
diff
changeset
|
9589 |
13232
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9590 #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
|
9591 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
|
9592 { |
27500
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
9593 Status status_return; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
9594 |
13232
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9595 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
|
9596 &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
|
9597 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
|
9598 &status_return); |
27500
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
9599 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
|
9600 { |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
9601 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
|
9602 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
|
9603 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
|
9604 &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
|
9605 copy_bufsiz, &keysym, |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
9606 &status_return); |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
9607 } |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
9608 |
23567
5a0cdfd791a2
(XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents:
23515
diff
changeset
|
9609 if (status_return == XLookupNone) |
5a0cdfd791a2
(XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents:
23515
diff
changeset
|
9610 break; |
5a0cdfd791a2
(XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents:
23515
diff
changeset
|
9611 else if (status_return == XLookupChars) |
29744
1ac32ce72622
(XTread_socket) <KeyPress>: In case XmbLookupString
Gerd Moellmann <gerd@gnu.org>
parents:
29717
diff
changeset
|
9612 { |
1ac32ce72622
(XTread_socket) <KeyPress>: In case XmbLookupString
Gerd Moellmann <gerd@gnu.org>
parents:
29717
diff
changeset
|
9613 keysym = NoSymbol; |
1ac32ce72622
(XTread_socket) <KeyPress>: In case XmbLookupString
Gerd Moellmann <gerd@gnu.org>
parents:
29717
diff
changeset
|
9614 modifiers = 0; |
1ac32ce72622
(XTread_socket) <KeyPress>: In case XmbLookupString
Gerd Moellmann <gerd@gnu.org>
parents:
29717
diff
changeset
|
9615 } |
23567
5a0cdfd791a2
(XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents:
23515
diff
changeset
|
9616 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
|
9617 && status_return != XLookupBoth) |
5a0cdfd791a2
(XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents:
23515
diff
changeset
|
9618 abort (); |
13232
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9619 } |
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9620 else |
30748 | 9621 nbytes = XLookupString (&event.xkey, copy_bufptr, |
9622 copy_bufsiz, &keysym, | |
9623 &compose_status); | |
13232
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9624 #else |
30748 | 9625 nbytes = XLookupString (&event.xkey, copy_bufptr, |
9626 copy_bufsiz, &keysym, | |
9627 &compose_status); | |
13232
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9628 #endif |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9629 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9630 orig_keysym = keysym; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9631 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9632 if (numchars > 1) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9633 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9634 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
|
9635 || keysym == XK_Delete |
17227
d11d6c9a48e8
(XTread_socket): Handle ISO_Left_Tab.
Richard M. Stallman <rms@gnu.org>
parents:
17194
diff
changeset
|
9636 #ifdef XK_ISO_Left_Tab |
17232
4604d19bd730
(XTread_socket): Accept XK_ISO_* keys.
Richard M. Stallman <rms@gnu.org>
parents:
17227
diff
changeset
|
9637 || (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
|
9638 #endif |
22400
8fbe6f509385
(XTread_socket): Accept Japanese XK keysyms.
Richard M. Stallman <rms@gnu.org>
parents:
22230
diff
changeset
|
9639 || (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
|
9640 || 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
|
9641 || IsMiscFunctionKey (keysym) /* 0xff60 <= x < VARIES */ |
3218
0069a30d083f
(XTread_socket, case KeyPress) [HPUX]:
Richard M. Stallman <rms@gnu.org>
parents:
3135
diff
changeset
|
9642 #ifdef HPUX |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9643 /* 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
|
9644 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
|
9645 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
|
9646 incorrectly. */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9647 || ((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
|
9648 && (unsigned)(keysym) < XK_KP_Space) |
3218
0069a30d083f
(XTread_socket, case KeyPress) [HPUX]:
Richard M. Stallman <rms@gnu.org>
parents:
3135
diff
changeset
|
9649 #endif |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9650 #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
|
9651 || orig_keysym == XK_dead_circumflex |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9652 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9653 #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
|
9654 || orig_keysym == XK_dead_grave |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9655 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9656 #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
|
9657 || orig_keysym == XK_dead_tilde |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9658 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9659 #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
|
9660 || orig_keysym == XK_dead_diaeresis |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9661 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9662 #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
|
9663 || orig_keysym == XK_dead_macron |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9664 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9665 #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
|
9666 || orig_keysym == XK_dead_degree |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9667 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9668 #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
|
9669 || orig_keysym == XK_dead_acute |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9670 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9671 #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
|
9672 || orig_keysym == XK_dead_cedilla |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9673 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9674 #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
|
9675 || orig_keysym == XK_dead_breve |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9676 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9677 #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
|
9678 || orig_keysym == XK_dead_ogonek |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9679 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9680 #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
|
9681 || orig_keysym == XK_dead_caron |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9682 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9683 #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
|
9684 || orig_keysym == XK_dead_doubleacute |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9685 #endif |
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9686 #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
|
9687 || orig_keysym == XK_dead_abovedot |
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9688 #endif |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9689 || 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
|
9690 || 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
|
9691 /* 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
|
9692 || (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
|
9693 && ! (IsModifierKey (orig_keysym) |
4244
bc70363458c3
(XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents:
4147
diff
changeset
|
9694 #ifndef HAVE_X11R5 |
bc70363458c3
(XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents:
4147
diff
changeset
|
9695 #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
|
9696 || ((unsigned)(orig_keysym) == XK_Mode_switch) |
4244
bc70363458c3
(XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents:
4147
diff
changeset
|
9697 #endif |
bc70363458c3
(XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents:
4147
diff
changeset
|
9698 #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
|
9699 || ((unsigned)(orig_keysym) == XK_Num_Lock) |
4244
bc70363458c3
(XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents:
4147
diff
changeset
|
9700 #endif |
bc70363458c3
(XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents:
4147
diff
changeset
|
9701 #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
|
9702 )) |
286 | 9703 { |
2064 | 9704 if (temp_index == sizeof temp_buffer / sizeof (short)) |
9705 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
|
9706 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
|
9707 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
|
9708 bufp->code = keysym; |
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
9709 XSETFRAME (bufp->frame_or_window, f); |
30197
3237a5529020
(construct_mouse_click, x_scroll_bar_to_input_event)
Gerd Moellmann <gerd@gnu.org>
parents:
30182
diff
changeset
|
9710 bufp->arg = Qnil; |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
9711 bufp->modifiers |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
9712 = 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
|
9713 modifiers); |
708 | 9714 bufp->timestamp = event.xkey.time; |
286 | 9715 bufp++; |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9716 count++; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9717 numchars--; |
286 | 9718 } |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9719 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
|
9720 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9721 register int i; |
30748 | 9722 register int c; |
9723 unsigned char *p, *pend; | |
9724 int nchars, len; | |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9725 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9726 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
|
9727 { |
30748 | 9728 if (temp_index == (sizeof temp_buffer |
9729 / sizeof (short))) | |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9730 temp_index = 0; |
30748 | 9731 temp_buffer[temp_index++] = copy_bufptr[i]; |
9732 } | |
9733 | |
9734 if (/* If the event is not from XIM, */ | |
9735 event.xkey.keycode != 0 | |
9736 /* or the current locale doesn't request | |
9737 decoding of the intup data, ... */ | |
9738 || coding.type == coding_type_raw_text | |
9739 || coding.type == coding_type_no_conversion) | |
9740 { | |
9741 /* ... we can use the input data as is. */ | |
9742 nchars = nbytes; | |
9743 } | |
9744 else | |
9745 { | |
9746 /* We have to decode the input data. */ | |
9747 int require; | |
9748 unsigned char *p; | |
9749 | |
9750 require = decoding_buffer_size (&coding, nbytes); | |
9751 p = (unsigned char *) alloca (require); | |
9752 coding.mode |= CODING_MODE_LAST_BLOCK; | |
9753 decode_coding (&coding, copy_bufptr, p, | |
9754 nbytes, require); | |
9755 nbytes = coding.produced; | |
9756 nchars = coding.produced_char; | |
9757 copy_bufptr = p; | |
9758 } | |
9759 | |
9760 /* Convert the input data to a sequence of | |
9761 character events. */ | |
9762 for (i = 0; i < nbytes; i += len) | |
9763 { | |
9764 c = STRING_CHAR_AND_LENGTH (copy_bufptr + i, | |
9765 nbytes - i, len); | |
9766 bufp->kind = (SINGLE_BYTE_CHAR_P (c) | |
9767 ? ascii_keystroke | |
9768 : multibyte_char_keystroke); | |
9769 bufp->code = c; | |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9770 XSETFRAME (bufp->frame_or_window, f); |
30197
3237a5529020
(construct_mouse_click, x_scroll_bar_to_input_event)
Gerd Moellmann <gerd@gnu.org>
parents:
30182
diff
changeset
|
9771 bufp->arg = Qnil; |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9772 bufp->modifiers |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9773 = 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
|
9774 modifiers); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9775 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
|
9776 bufp++; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9777 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9778 |
30748 | 9779 count += nchars; |
9780 numchars -= nchars; | |
23567
5a0cdfd791a2
(XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents:
23515
diff
changeset
|
9781 |
5a0cdfd791a2
(XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents:
23515
diff
changeset
|
9782 if (keysym == NoSymbol) |
5a0cdfd791a2
(XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents:
23515
diff
changeset
|
9783 break; |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9784 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9785 else |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9786 abort (); |
286 | 9787 } |
2064 | 9788 else |
9789 abort (); | |
286 | 9790 } |
27619
1d5c785bca99
* xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents:
27542
diff
changeset
|
9791 #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
|
9792 /* 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
|
9793 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
|
9794 client. */ |
1d5c785bca99
* xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents:
27542
diff
changeset
|
9795 break; |
1d5c785bca99
* xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents:
27542
diff
changeset
|
9796 #else |
13898
dceb33c07f9e
(XTread_socket): Pass KeyPress events to the toolkit.
Richard M. Stallman <rms@gnu.org>
parents:
13884
diff
changeset
|
9797 goto OTHER; |
27619
1d5c785bca99
* xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents:
27542
diff
changeset
|
9798 #endif |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9799 |
27500
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
9800 case KeyRelease: |
27619
1d5c785bca99
* xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents:
27542
diff
changeset
|
9801 #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
|
9802 /* 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
|
9803 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
|
9804 client. */ |
1d5c785bca99
* xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents:
27542
diff
changeset
|
9805 break; |
1d5c785bca99
* xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents:
27542
diff
changeset
|
9806 #else |
27500
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
9807 goto OTHER; |
27619
1d5c785bca99
* xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents:
27542
diff
changeset
|
9808 #endif |
27500
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
9809 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9810 /* 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
|
9811 FocusIn-EnterNotify FocusOut-LeaveNotify mess. If |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9812 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
|
9813 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
|
9814 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
|
9815 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
|
9816 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9817 case EnterNotify: |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9818 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9819 int from_menu_bar_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9820 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9821 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
|
9822 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9823 #ifdef LESSTIF_VERSION |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9824 /* 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
|
9825 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
|
9826 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
|
9827 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
|
9828 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
|
9829 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
|
9830 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
|
9831 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
|
9832 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
|
9833 value. |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9834 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9835 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
|
9836 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
|
9837 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9838 (gerd, LessTif 0.88.1). */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9839 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9840 if (!event.xcrossing.focus |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9841 && f |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9842 && f->output_data.x->menubar_widget) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9843 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9844 Window focus; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9845 int revert; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9846 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9847 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
|
9848 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
|
9849 from_menu_bar_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9850 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9851 #endif /* LESSTIF_VERSION */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9852 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9853 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
|
9854 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9855 /* Avoid nasty pop/raise loops. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9856 if (f && (!(f->auto_raise) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9857 || !(f->auto_lower) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9858 || (event.xcrossing.time - enter_timestamp) > 500)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9859 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9860 x_new_focus_frame (dpyinfo, f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9861 enter_timestamp = event.xcrossing.time; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9862 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9863 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9864 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
|
9865 x_new_focus_frame (dpyinfo, 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9866 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9867 /* EnterNotify counts as mouse movement, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9868 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
|
9869 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
|
9870 note_mouse_movement (f, &event.xmotion); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9871 goto OTHER; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9872 } |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9873 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9874 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
|
9875 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
|
9876 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
|
9877 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
|
9878 if (f) |
29512
e222720769a0
(XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents:
29458
diff
changeset
|
9879 { |
e222720769a0
(XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents:
29458
diff
changeset
|
9880 x_new_focus_frame (dpyinfo, f); |
e222720769a0
(XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents:
29458
diff
changeset
|
9881 |
e222720769a0
(XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents:
29458
diff
changeset
|
9882 /* Don't stop displaying the initial startup message |
e222720769a0
(XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents:
29458
diff
changeset
|
9883 for a switch-frame event we don't need. */ |
e222720769a0
(XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents:
29458
diff
changeset
|
9884 if (GC_NILP (Vterminal_frame) |
e222720769a0
(XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents:
29458
diff
changeset
|
9885 && GC_CONSP (Vframe_list) |
e222720769a0
(XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents:
29458
diff
changeset
|
9886 && !GC_NILP (XCDR (Vframe_list))) |
e222720769a0
(XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents:
29458
diff
changeset
|
9887 { |
e222720769a0
(XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents:
29458
diff
changeset
|
9888 bufp->kind = FOCUS_IN_EVENT; |
e222720769a0
(XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents:
29458
diff
changeset
|
9889 XSETFRAME (bufp->frame_or_window, f); |
30197
3237a5529020
(construct_mouse_click, x_scroll_bar_to_input_event)
Gerd Moellmann <gerd@gnu.org>
parents:
30182
diff
changeset
|
9890 bufp->arg = Qnil; |
29512
e222720769a0
(XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents:
29458
diff
changeset
|
9891 ++bufp, ++count, --numchars; |
e222720769a0
(XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents:
29458
diff
changeset
|
9892 } |
e222720769a0
(XTread_socket) <FocusIn>: Queue a FOCUS_IN_EVENT which
Gerd Moellmann <gerd@gnu.org>
parents:
29458
diff
changeset
|
9893 } |
13205
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
9894 |
13232
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9895 #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
|
9896 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
|
9897 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
|
9898 #endif |
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9899 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9900 goto OTHER; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9901 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9902 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
|
9903 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
|
9904 if (f) |
7169
c21fcad6f1f5
(XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents:
7167
diff
changeset
|
9905 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9906 Lisp_Object frame; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9907 int from_menu_bar_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9908 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9909 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
|
9910 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9911 /* 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
|
9912 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
|
9913 clear_mouse_face (dpyinfo); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9914 dpyinfo->mouse_face_mouse_frame = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9915 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9916 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9917 /* 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
|
9918 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
|
9919 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
|
9920 the mouse leaves the frame. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9921 if (any_help_event_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9922 { |
30214
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
9923 Lisp_Object frame; |
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
9924 int n; |
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
9925 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9926 XSETFRAME (frame, f); |
31011
bc4608ec8691
(XTread_socket): Change calls to gen_help_event.
Gerd Moellmann <gerd@gnu.org>
parents:
30748
diff
changeset
|
9927 n = gen_help_event (bufp, numchars, |
bc4608ec8691
(XTread_socket): Change calls to gen_help_event.
Gerd Moellmann <gerd@gnu.org>
parents:
30748
diff
changeset
|
9928 Qnil, frame, Qnil, Qnil, 0); |
30214
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
9929 bufp += n, count += n, numchars -= n; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9930 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9931 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9932 #ifdef LESSTIF_VERSION |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9933 /* 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
|
9934 EnterNotify case. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9935 if (!event.xcrossing.focus |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9936 && f->output_data.x->menubar_widget) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9937 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9938 Window focus; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9939 int revert; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9940 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
|
9941 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
|
9942 from_menu_bar_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9943 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9944 #endif /* LESSTIF_VERSION */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9945 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9946 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
|
9947 x_mouse_leave (dpyinfo); |
7169
c21fcad6f1f5
(XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents:
7167
diff
changeset
|
9948 else |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9949 { |
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
9950 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
|
9951 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
|
9952 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
|
9953 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
|
9954 } |
7169
c21fcad6f1f5
(XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents:
7167
diff
changeset
|
9955 } |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9956 goto OTHER; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9957 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9958 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
|
9959 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
|
9960 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
|
9961 && 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
|
9962 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
|
9963 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
|
9964 x_new_focus_frame (dpyinfo, 0); |
13205
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
9965 |
13232
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9966 #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
|
9967 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
|
9968 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
|
9969 #endif |
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9970 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9971 goto OTHER; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9972 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9973 case MotionNotify: |
286 | 9974 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9975 previous_help_echo = help_echo; |
30302
9a5ccf8784f3
(help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
30214
diff
changeset
|
9976 help_echo = help_echo_object = help_echo_window = Qnil; |
30214
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
9977 help_echo_pos = -1; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9978 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9979 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
|
9980 && 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
|
9981 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
|
9982 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
|
9983 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
|
9984 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9985 if (f) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9986 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
|
9987 else |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9988 { |
25795
84921c27b2b5
(XTread_socket) <MotionNotify>: Change #ifdef
Gerd Moellmann <gerd@gnu.org>
parents:
25716
diff
changeset
|
9989 #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
|
9990 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
|
9991 = 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
|
9992 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9993 if (bar) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9994 x_scroll_bar_note_movement (bar, &event); |
25795
84921c27b2b5
(XTread_socket) <MotionNotify>: Change #ifdef
Gerd Moellmann <gerd@gnu.org>
parents:
25716
diff
changeset
|
9995 #endif /* USE_TOOLKIT_SCROLL_BARS */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9996 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9997 /* 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
|
9998 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
|
9999 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
|
10000 } |
24991
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 /* 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
|
10003 has changed, generate a HELP_EVENT. */ |
30050
ed1979c6dfb9
* xterm.c (note_mode_line_highlight, note_mouse_highlight)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30042
diff
changeset
|
10004 if (!NILP (help_echo) |
ed1979c6dfb9
* xterm.c (note_mode_line_highlight, note_mouse_highlight)
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
30042
diff
changeset
|
10005 || !NILP (previous_help_echo)) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10006 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10007 Lisp_Object frame; |
30214
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
10008 int n; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10009 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10010 if (f) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10011 XSETFRAME (frame, f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10012 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10013 frame = Qnil; |
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 any_help_event_p = 1; |
31011
bc4608ec8691
(XTread_socket): Change calls to gen_help_event.
Gerd Moellmann <gerd@gnu.org>
parents:
30748
diff
changeset
|
10016 n = gen_help_event (bufp, numchars, help_echo, frame, |
30302
9a5ccf8784f3
(help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
30214
diff
changeset
|
10017 help_echo_window, help_echo_object, |
9a5ccf8784f3
(help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
30214
diff
changeset
|
10018 help_echo_pos); |
30214
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
10019 bufp += n, count += n, numchars -= n; |
24991
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10022 goto OTHER; |
286 | 10023 } |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10024 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10025 case ConfigureNotify: |
17953
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10026 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
|
10027 if (f) |
3030
2c5ea1c98256
(XTread_socket): For ConfigureNotify event,
Richard M. Stallman <rms@gnu.org>
parents:
3016
diff
changeset
|
10028 { |
25716
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
10029 #ifndef USE_X_TOOLKIT |
24489
abf5b4802f9b
(XTread_socket) <ConfigureNotify>:
Karl Heuer <kwzh@gnu.org>
parents:
24484
diff
changeset
|
10030 int rows = PIXEL_TO_CHAR_HEIGHT (f, event.xconfigure.height); |
abf5b4802f9b
(XTread_socket) <ConfigureNotify>:
Karl Heuer <kwzh@gnu.org>
parents:
24484
diff
changeset
|
10031 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
|
10032 |
11436
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
10033 /* 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
|
10034 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
|
10035 of the EmacsFrame widget. */ |
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
10036 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10037 /* 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
|
10038 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
|
10039 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
|
10040 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
|
10041 || 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
|
10042 || 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
|
10043 || 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
|
10044 { |
25360
2f3ad0a21be5
Call change_frame_size and do_pending_window_change with
Gerd Moellmann <gerd@gnu.org>
parents:
25328
diff
changeset
|
10045 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
|
10046 SET_FRAME_GARBAGED (f); |
16491
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
10047 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
|
10048 } |
11436
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
10049 #endif |
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
10050 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
10051 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
|
10052 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
|
10053 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10054 /* 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
|
10055 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
|
10056 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
|
10057 &f->output_data.x->top_pos); |
d25d2472df51
(XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents:
17963
diff
changeset
|
10058 |
27500
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10059 #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
|
10060 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
|
10061 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
|
10062 #endif |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
10063 |
18008
d25d2472df51
(XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents:
17963
diff
changeset
|
10064 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
|
10065 { |
d25d2472df51
(XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents:
17963
diff
changeset
|
10066 /* 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
|
10067 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
|
10068 f->output_data.x->win_gravity = NorthWestGravity; |
d25d2472df51
(XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents:
17963
diff
changeset
|
10069 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
|
10070 } |
20182
9f3dd970927e
(XTread_socket): Check for bogus (0,0) location.
Karl Heuer <kwzh@gnu.org>
parents:
20180
diff
changeset
|
10071 #ifdef USE_MOTIF |
9f3dd970927e
(XTread_socket): Check for bogus (0,0) location.
Karl Heuer <kwzh@gnu.org>
parents:
20180
diff
changeset
|
10072 /* 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
|
10073 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
|
10074 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
|
10075 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
|
10076 { |
9f3dd970927e
(XTread_socket): Check for bogus (0,0) location.
Karl Heuer <kwzh@gnu.org>
parents:
20180
diff
changeset
|
10077 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
|
10078 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
|
10079 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10080 #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
|
10081 } |
11436
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
10082 goto OTHER; |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10083 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10084 case ButtonPress: |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10085 case ButtonRelease: |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
10086 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10087 /* 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
|
10088 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
|
10089 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
|
10090 int tool_bar_p = 0; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10091 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10092 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
|
10093 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
|
10094 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10095 if (dpyinfo->grabbed |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10096 && last_mouse_frame |
10274
83aaf59dabbe
(XTupdate_begin): Fix backward test in previous change.
Richard M. Stallman <rms@gnu.org>
parents:
10223
diff
changeset
|
10097 && 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
|
10098 f = last_mouse_frame; |
83aaf59dabbe
(XTupdate_begin): Fix backward test in previous change.
Richard M. Stallman <rms@gnu.org>
parents:
10223
diff
changeset
|
10099 else |
12657
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
10100 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
|
10101 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10102 if (f) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10103 { |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
10104 /* 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
|
10105 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
|
10106 && 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
|
10107 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10108 Lisp_Object window; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10109 int p, x, y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10110 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10111 x = event.xbutton.x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10112 y = event.xbutton.y; |
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 /* Set x and y. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10115 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
|
10116 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
|
10117 { |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
10118 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
|
10119 tool_bar_p = 1; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10120 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10121 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10122 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
10123 if (!tool_bar_p) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10124 if (!dpyinfo->x_focus_frame |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10125 || f == dpyinfo->x_focus_frame) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10126 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
|
10127 } |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
10128 else |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
10129 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10130 #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
|
10131 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
|
10132 = 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
|
10133 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10134 if (bar) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10135 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
|
10136 #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
|
10137 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10138 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10139 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
|
10140 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10141 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
|
10142 last_mouse_frame = f; |
23643
701b6bdc7a22
(XTread_socket): ButtonPress clears f->mouse_moved.
Karl Heuer <kwzh@gnu.org>
parents:
23567
diff
changeset
|
10143 /* Ignore any mouse motion that happened |
701b6bdc7a22
(XTread_socket): ButtonPress clears f->mouse_moved.
Karl Heuer <kwzh@gnu.org>
parents:
23567
diff
changeset
|
10144 before this event; any subsequent mouse-movement |
701b6bdc7a22
(XTread_socket): ButtonPress clears f->mouse_moved.
Karl Heuer <kwzh@gnu.org>
parents:
23567
diff
changeset
|
10145 Emacs events should reflect only motion after |
701b6bdc7a22
(XTread_socket): ButtonPress clears f->mouse_moved.
Karl Heuer <kwzh@gnu.org>
parents:
23567
diff
changeset
|
10146 the ButtonPress. */ |
23701
6c0896abbbd4
(XTread_socket): Fix previous change in case F == 0.
Karl Heuer <kwzh@gnu.org>
parents:
23684
diff
changeset
|
10147 if (f != 0) |
6c0896abbbd4
(XTread_socket): Fix previous change in case F == 0.
Karl Heuer <kwzh@gnu.org>
parents:
23684
diff
changeset
|
10148 f->mouse_moved = 0; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10149 |
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
10150 if (!tool_bar_p) |
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
10151 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
|
10152 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10153 else |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10154 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10155 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
|
10156 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10157 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10158 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
|
10159 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10160 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
|
10161 bufp++; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10162 count++; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10163 numchars--; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10164 } |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
10165 |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
10166 #ifdef USE_X_TOOLKIT |
12657
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
10167 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
|
10168 /* For a down-event in the menu bar, |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
10169 don't pass it to Xt right now. |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
10170 Instead, save it away |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
10171 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
|
10172 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
|
10173 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
|
10174 /* 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
|
10175 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
|
10176 && event.xbutton.x >= 0 |
21b6b8f50143
(XTread_socket): Verify a ButtonPress was actually in the
Richard M. Stallman <rms@gnu.org>
parents:
13507
diff
changeset
|
10177 && 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
|
10178 && event.xbutton.y >= 0 |
21b6b8f50143
(XTread_socket): Verify a ButtonPress was actually in the
Richard M. Stallman <rms@gnu.org>
parents:
13507
diff
changeset
|
10179 && 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
|
10180 && event.xbutton.same_screen) |
12657
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
10181 { |
15711
099dc465c948
(SET_SAVED_MENU_EVENT): New macro.
Karl Heuer <kwzh@gnu.org>
parents:
15639
diff
changeset
|
10182 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
|
10183 XSETFRAME (last_mouse_press_frame, f); |
15793
fc460a98a7f9
(last_mouse_press_frame): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15711
diff
changeset
|
10184 } |
15803
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
10185 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
|
10186 { |
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
10187 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
|
10188 goto OTHER; |
15803
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
10189 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10190 |
15803
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
10191 #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
|
10192 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
|
10193 else if (event.type == ButtonRelease) |
fc460a98a7f9
(last_mouse_press_frame): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15711
diff
changeset
|
10194 { |
15803
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
10195 if (!NILP (last_mouse_press_frame)) |
15794 | 10196 { |
15803
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
10197 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
|
10198 if (f->output_data.x) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10199 SET_SAVED_BUTTON_EVENT; |
15794 | 10200 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10201 else |
15808
3afa38a18102
(XTread_socket): Delete the code to pass menu bar keys
Richard M. Stallman <rms@gnu.org>
parents:
15806
diff
changeset
|
10202 goto OTHER; |
12657
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
10203 } |
15803
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
10204 #endif /* USE_MOTIF */ |
12657
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
10205 else |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
10206 goto OTHER; |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
10207 #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
|
10208 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10209 break; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10210 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10211 case CirculateNotify: |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10212 goto OTHER; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10213 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10214 case CirculateRequest: |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10215 goto OTHER; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10216 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10217 case VisibilityNotify: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10218 goto OTHER; |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10219 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10220 case MappingNotify: |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10221 /* 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
|
10222 local cache. */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10223 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
|
10224 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10225 case MappingModifier: |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10226 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
|
10227 /* 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
|
10228 case MappingKeyboard: |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10229 XRefreshKeyboardMapping (&event.xmapping); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10230 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10231 goto OTHER; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10232 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10233 default: |
13898
dceb33c07f9e
(XTread_socket): Pass KeyPress events to the toolkit.
Richard M. Stallman <rms@gnu.org>
parents:
13884
diff
changeset
|
10234 OTHER: |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10235 #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
|
10236 BLOCK_INPUT; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10237 XtDispatchEvent (&event); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10238 UNBLOCK_INPUT; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10239 #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
|
10240 break; |
1436
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
10241 } |
286 | 10242 } |
10243 } | |
10244 | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10245 out:; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10246 |
8485
6e4b40c80021
(XTread_socket): Don't test X_IO_BUG; make that code unconditional.
Richard M. Stallman <rms@gnu.org>
parents:
8437
diff
changeset
|
10247 /* 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
|
10248 when the window is destroyed. Detect that. (1994.) */ |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
10249 if (! event_found) |
7916
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
10250 { |
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
10251 /* 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
|
10252 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
|
10253 B. Bretthauer, 1994 */ |
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
10254 x_noop_count++; |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
10255 if (x_noop_count >= 100) |
7916
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
10256 { |
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
10257 x_noop_count=0; |
12657
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
10258 |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
10259 if (next_noop_dpyinfo == 0) |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
10260 next_noop_dpyinfo = x_display_list; |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
10261 |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
10262 XNoOp (next_noop_dpyinfo->display); |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
10263 |
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
10264 /* 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
|
10265 next_noop_dpyinfo = next_noop_dpyinfo->next; |
7916
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
10266 } |
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
10267 } |
5753
eb44ecad5557
(XTread_socket): Add X_IO_BUG conditional.
Richard M. Stallman <rms@gnu.org>
parents:
5740
diff
changeset
|
10268 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10269 /* 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
|
10270 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
|
10271 /* ??? 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
|
10272 if (pending_autoraise_frame) |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
10273 { |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
10274 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
|
10275 pending_autoraise_frame = 0; |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
10276 } |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
10277 |
286 | 10278 UNBLOCK_INPUT; |
30083
998d20abc885
(XTread_socket): Increment handling_signal at the start,
Gerd Moellmann <gerd@gnu.org>
parents:
30050
diff
changeset
|
10279 --handling_signal; |
286 | 10280 return count; |
10281 } | |
24991
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10284 |
286 | 10285 |
24991
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 Text Cursor |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10290 /* 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
|
10291 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
|
10292 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
|
10293 line after HPOS has been written. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10294 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10295 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10296 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
|
10297 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10298 int hpos, n; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10299 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10300 if (updated_area == TEXT_AREA |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10301 && 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
|
10302 && hpos <= w->phys_cursor.hpos |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10303 && (n < 0 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10304 || hpos + n > w->phys_cursor.hpos)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10305 w->phys_cursor_on_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10306 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10307 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10308 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10309 /* 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
|
10310 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
|
10311 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
|
10312 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
|
10313 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10314 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
|
10315 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
|
10316 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
|
10317 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10318 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10319 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
|
10320 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10321 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10322 GC gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10323 int whole_line_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10324 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10325 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
|
10326 XRectangle clip_rect; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10327 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
|
10328 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10329 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
|
10330 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10331 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
|
10332 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
|
10333 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
|
10334 clip_rect.width = window_width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10335 clip_rect.height = row->visible_height; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10336 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10337 /* 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
|
10338 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
|
10339 if (whole_line_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10340 { |
25465 | 10341 clip_rect.x -= FRAME_X_LEFT_FLAGS_AREA_WIDTH (f); |
10342 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
|
10343 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10344 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10345 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
|
10346 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10347 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10348 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10349 /* 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
|
10350 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10351 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10352 x_draw_hollow_cursor (w, row) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10353 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10354 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10355 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10356 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
|
10357 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
|
10358 Display *dpy = FRAME_X_DISPLAY (f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10359 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
|
10360 XGCValues xgcv; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10361 struct glyph *cursor_glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10362 GC gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10363 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10364 /* 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
|
10365 coordinates. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10366 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
|
10367 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
|
10368 + row->ascent - w->phys_cursor_ascent); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10369 h = row->height - 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10370 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10371 /* 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
|
10372 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
|
10373 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
|
10374 if (cursor_glyph == NULL) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10375 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10376 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10377 /* 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
|
10378 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
|
10379 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
|
10380 width instead. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10381 wd = cursor_glyph->pixel_width - 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10382 if (cursor_glyph->type == STRETCH_GLYPH |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10383 && !x_stretch_cursor_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10384 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
|
10385 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10386 /* 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
|
10387 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
|
10388 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
|
10389 if (dpyinfo->scratch_cursor_gc) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10390 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
|
10391 else |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10392 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
|
10393 GCForeground, &xgcv); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10394 gc = dpyinfo->scratch_cursor_gc; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10395 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10396 /* 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
|
10397 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
|
10398 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
|
10399 XSetClipMask (dpy, gc, None); |
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 |
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 /* 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
|
10404 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10405 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
|
10406 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
|
10407 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
|
10408 --gerd. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10409 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10410 static void |
28321
fc0a61d81fc5
(x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents:
28307
diff
changeset
|
10411 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
|
10412 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10413 struct glyph_row *row; |
28321
fc0a61d81fc5
(x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents:
28307
diff
changeset
|
10414 int width; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10415 { |
30742
e25bfc3f618c
(x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents:
30700
diff
changeset
|
10416 struct frame *f = XFRAME (w->frame); |
e25bfc3f618c
(x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents:
30700
diff
changeset
|
10417 struct glyph *cursor_glyph; |
e25bfc3f618c
(x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents:
30700
diff
changeset
|
10418 GC gc; |
e25bfc3f618c
(x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents:
30700
diff
changeset
|
10419 int x; |
e25bfc3f618c
(x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents:
30700
diff
changeset
|
10420 unsigned long mask; |
e25bfc3f618c
(x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents:
30700
diff
changeset
|
10421 XGCValues xgcv; |
e25bfc3f618c
(x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents:
30700
diff
changeset
|
10422 Display *dpy; |
e25bfc3f618c
(x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents:
30700
diff
changeset
|
10423 Window window; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10424 |
30742
e25bfc3f618c
(x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents:
30700
diff
changeset
|
10425 /* If cursor is out of bounds, don't draw garbage. This can happen |
e25bfc3f618c
(x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents:
30700
diff
changeset
|
10426 in mini-buffer windows when switching between echo area glyphs |
e25bfc3f618c
(x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents:
30700
diff
changeset
|
10427 and mini-buffer. */ |
e25bfc3f618c
(x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents:
30700
diff
changeset
|
10428 cursor_glyph = get_phys_cursor_glyph (w); |
e25bfc3f618c
(x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents:
30700
diff
changeset
|
10429 if (cursor_glyph == NULL) |
e25bfc3f618c
(x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents:
30700
diff
changeset
|
10430 return; |
e25bfc3f618c
(x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents:
30700
diff
changeset
|
10431 |
e25bfc3f618c
(x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents:
30700
diff
changeset
|
10432 /* If on an image, draw like a normal cursor. That's usually better |
e25bfc3f618c
(x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents:
30700
diff
changeset
|
10433 visible than drawing a bar, esp. if the image is large so that |
e25bfc3f618c
(x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents:
30700
diff
changeset
|
10434 the bar might not be in the window. */ |
e25bfc3f618c
(x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents:
30700
diff
changeset
|
10435 if (cursor_glyph->type == IMAGE_GLYPH) |
e25bfc3f618c
(x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents:
30700
diff
changeset
|
10436 { |
e25bfc3f618c
(x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents:
30700
diff
changeset
|
10437 struct glyph_row *row; |
e25bfc3f618c
(x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents:
30700
diff
changeset
|
10438 row = MATRIX_ROW (w->current_matrix, w->phys_cursor.vpos); |
e25bfc3f618c
(x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents:
30700
diff
changeset
|
10439 x_draw_phys_cursor_glyph (w, row, DRAW_CURSOR); |
e25bfc3f618c
(x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents:
30700
diff
changeset
|
10440 } |
e25bfc3f618c
(x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents:
30700
diff
changeset
|
10441 else |
e25bfc3f618c
(x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents:
30700
diff
changeset
|
10442 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10443 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
|
10444 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
|
10445 xgcv.graphics_exposures = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10446 mask = GCForeground | GCBackground | GCGraphicsExposures; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10447 dpy = FRAME_X_DISPLAY (f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10448 window = FRAME_X_WINDOW (f); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10449 gc = FRAME_X_DISPLAY_INFO (f)->scratch_cursor_gc; |
30742
e25bfc3f618c
(x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents:
30700
diff
changeset
|
10450 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10451 if (gc) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10452 XChangeGC (dpy, gc, mask, &xgcv); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10453 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10454 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10455 gc = XCreateGC (dpy, window, mask, &xgcv); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10456 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
|
10457 } |
30742
e25bfc3f618c
(x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents:
30700
diff
changeset
|
10458 |
28321
fc0a61d81fc5
(x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents:
28307
diff
changeset
|
10459 if (width < 0) |
fc0a61d81fc5
(x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents:
28307
diff
changeset
|
10460 width = f->output_data.x->cursor_width; |
30742
e25bfc3f618c
(x_draw_bar_cursor): If cursor is on an image, draw a
Gerd Moellmann <gerd@gnu.org>
parents:
30700
diff
changeset
|
10461 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10462 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
|
10463 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
|
10464 XFillRectangle (dpy, window, gc, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10465 x, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10466 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
|
10467 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
|
10468 row->height); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10469 XSetClipMask (dpy, gc, None); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10470 } |
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 |
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 /* 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
|
10475 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
|
10476 is is about to be rewritten. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10477 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10478 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10479 x_clear_cursor (w) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10480 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10481 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10482 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
|
10483 x_update_window_cursor (w, 0); |
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 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10487 /* 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
|
10488 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
|
10489 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10490 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10491 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
|
10492 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10493 struct glyph_row *row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10494 enum draw_glyphs_face hl; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10495 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10496 /* 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
|
10497 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
|
10498 glyphs and mini-buffer. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10499 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
|
10500 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10501 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
|
10502 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
|
10503 hl, 0, 0, 0); |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10504 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10505 /* 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
|
10506 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
|
10507 are redrawn. */ |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10508 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
|
10509 { |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10510 if (row > w->current_matrix->rows |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10511 && MATRIX_ROW_OVERLAPS_SUCC_P (row - 1)) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10512 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
|
10513 |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10514 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
|
10515 && MATRIX_ROW_OVERLAPS_PRED_P (row + 1)) |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10516 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
|
10517 } |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
10518 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10519 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10520 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10521 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10522 /* 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
|
10523 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10524 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10525 x_erase_phys_cursor (w) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10526 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10527 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10528 struct frame *f = XFRAME (w->frame); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10529 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
|
10530 int hpos = w->phys_cursor.hpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10531 int vpos = w->phys_cursor.vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10532 int mouse_face_here_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10533 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
|
10534 struct glyph_row *cursor_row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10535 struct glyph *cursor_glyph; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10536 enum draw_glyphs_face hl; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10537 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10538 /* 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
|
10539 screen. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10540 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
|
10541 goto mark_cursor_off; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10542 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10543 /* 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
|
10544 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
|
10545 if (vpos >= active_glyphs->nrows) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10546 goto mark_cursor_off; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10547 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10548 /* 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
|
10549 can do. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10550 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
|
10551 if (!cursor_row->enabled_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10552 goto mark_cursor_off; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10553 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10554 /* 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
|
10555 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
|
10556 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
|
10557 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
|
10558 cursor glyph at hand. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10559 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
|
10560 goto mark_cursor_off; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10561 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10562 /* 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
|
10563 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
|
10564 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
|
10565 && 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
|
10566 && (vpos > dpyinfo->mouse_face_beg_row |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10567 || (vpos == dpyinfo->mouse_face_beg_row |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10568 && hpos >= dpyinfo->mouse_face_beg_col)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10569 && (vpos < dpyinfo->mouse_face_end_row |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10570 || (vpos == dpyinfo->mouse_face_end_row |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10571 && hpos < dpyinfo->mouse_face_end_col)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10572 /* 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
|
10573 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
|
10574 mouse highlighting does not. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10575 && cursor_row->used[TEXT_AREA] > hpos) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10576 mouse_face_here_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10577 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10578 /* 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
|
10579 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
|
10580 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10581 int x; |
25546 | 10582 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
|
10583 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10584 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
|
10585 if (cursor_glyph == NULL) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10586 goto mark_cursor_off; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10587 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10588 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
|
10589 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10590 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
|
10591 x, |
25546 | 10592 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
|
10593 cursor_row->y)), |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10594 cursor_glyph->pixel_width, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10595 cursor_row->visible_height, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10596 False); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10597 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10598 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10599 /* 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
|
10600 if (mouse_face_here_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10601 hl = DRAW_MOUSE_FACE; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10602 else if (cursor_row->inverse_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10603 hl = DRAW_INVERSE_VIDEO; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10604 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10605 hl = DRAW_NORMAL_TEXT; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10606 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
|
10607 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10608 mark_cursor_off: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10609 w->phys_cursor_on_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10610 w->phys_cursor_type = NO_CURSOR; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10611 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10612 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10613 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10614 /* 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
|
10615 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
|
10616 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
|
10617 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10618 void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10619 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
|
10620 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10621 int on, hpos, vpos, x, y; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10622 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10623 struct frame *f = XFRAME (w->frame); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10624 int new_cursor_type; |
28321
fc0a61d81fc5
(x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents:
28307
diff
changeset
|
10625 int new_cursor_width; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10626 struct glyph_matrix *current_glyphs; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10627 struct glyph_row *glyph_row; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10628 struct glyph *glyph; |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
10629 |
2235
80e0d36bbb77
* xterm.c (x_display_box_cursor, x_display_bar_cursor): Don't
Jim Blandy <jimb@redhat.com>
parents:
2195
diff
changeset
|
10630 /* 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
|
10631 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
|
10632 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
|
10633 window. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10634 if (! FRAME_VISIBLE_P (f) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10635 || FRAME_GARBAGED_P (f) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10636 || vpos >= w->current_matrix->nrows |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10637 || hpos >= w->current_matrix->matrix_w) |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
10638 return; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
10639 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
10640 /* 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
|
10641 if (!on && !w->phys_cursor_on_p) |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
10642 return; |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
10643 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10644 current_glyphs = w->current_matrix; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10645 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
|
10646 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
|
10647 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10648 /* 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
|
10649 display the cursor. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10650 if (!glyph_row->enabled_p) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10651 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10652 w->phys_cursor_on_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10653 return; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10654 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10655 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10656 xassert (interrupt_input_blocked); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10657 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10658 /* 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
|
10659 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
|
10660 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
|
10661 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
|
10662 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
|
10663 box cursor. */ |
28321
fc0a61d81fc5
(x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents:
28307
diff
changeset
|
10664 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
|
10665 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
|
10666 && 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
|
10667 && 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
|
10668 { |
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10669 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
|
10670 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
|
10671 else |
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10672 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
|
10673 } |
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10674 else |
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10675 { |
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10676 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
|
10677 || 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
|
10678 { |
27844
72e15185eeb5
(x_display_and_set_cursor): Display cursor of
Gerd Moellmann <gerd@gnu.org>
parents:
27619
diff
changeset
|
10679 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
|
10680 |
31699
9ff91d2b19f8
(x_display_and_set_cursor): Don't show a hollow box
Gerd Moellmann <gerd@gnu.org>
parents:
31694
diff
changeset
|
10681 if (MINI_WINDOW_P (w) |
9ff91d2b19f8
(x_display_and_set_cursor): Don't show a hollow box
Gerd Moellmann <gerd@gnu.org>
parents:
31694
diff
changeset
|
10682 || !cursor_in_non_selected_windows |
9ff91d2b19f8
(x_display_and_set_cursor): Don't show a hollow box
Gerd Moellmann <gerd@gnu.org>
parents:
31694
diff
changeset
|
10683 || NILP (XBUFFER (w->buffer)->cursor_type)) |
25191
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10684 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
|
10685 else |
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10686 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
|
10687 } |
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10688 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
|
10689 new_cursor_type = NO_CURSOR; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10690 else |
28321
fc0a61d81fc5
(x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents:
28307
diff
changeset
|
10691 { |
fc0a61d81fc5
(x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents:
28307
diff
changeset
|
10692 struct buffer *b = XBUFFER (w->buffer); |
fc0a61d81fc5
(x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents:
28307
diff
changeset
|
10693 |
fc0a61d81fc5
(x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents:
28307
diff
changeset
|
10694 if (EQ (b->cursor_type, Qt)) |
fc0a61d81fc5
(x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents:
28307
diff
changeset
|
10695 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
|
10696 else |
fc0a61d81fc5
(x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents:
28307
diff
changeset
|
10697 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
|
10698 &new_cursor_width); |
fc0a61d81fc5
(x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents:
28307
diff
changeset
|
10699 } |
25191
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10700 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10701 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10702 /* 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
|
10703 it is in the wrong place, or the cursor type is not what we want, |
286 | 10704 erase it. */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10705 if (w->phys_cursor_on_p |
286 | 10706 && (!on |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10707 || w->phys_cursor.x != x |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10708 || w->phys_cursor.y != y |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10709 || 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
|
10710 x_erase_phys_cursor (w); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10711 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10712 /* 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
|
10713 display it. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10714 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
|
10715 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10716 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
|
10717 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
|
10718 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10719 /* 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
|
10720 of them may need the information. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10721 w->phys_cursor.x = x; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10722 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
|
10723 w->phys_cursor.hpos = hpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10724 w->phys_cursor.vpos = vpos; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10725 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
|
10726 w->phys_cursor_on_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10727 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10728 switch (new_cursor_type) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10729 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10730 case HOLLOW_BOX_CURSOR: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10731 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
|
10732 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10733 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10734 case FILLED_BOX_CURSOR: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10735 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
|
10736 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10737 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10738 case BAR_CURSOR: |
28321
fc0a61d81fc5
(x_display_and_set_cursor): Choose cursor depending
Gerd Moellmann <gerd@gnu.org>
parents:
28307
diff
changeset
|
10739 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
|
10740 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10741 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10742 case NO_CURSOR: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10743 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10744 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10745 default: |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10746 abort (); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10747 } |
27619
1d5c785bca99
* xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents:
27542
diff
changeset
|
10748 |
1d5c785bca99
* xterm.c (x_display_and_set_cursor): Set pre-edit area.
Gerd Moellmann <gerd@gnu.org>
parents:
27542
diff
changeset
|
10749 #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
|
10750 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
|
10751 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
|
10752 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
|
10753 #endif |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10754 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10755 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10756 #ifndef XFlush |
771 | 10757 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
|
10758 XFlush (FRAME_X_DISPLAY (f)); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10759 #endif |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10760 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10761 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10762 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10763 /* 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
|
10764 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
|
10765 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
|
10766 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
|
10767 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
|
10768 |
21514 | 10769 void |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10770 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
|
10771 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10772 int on, hpos, vpos, x, y; |
286 | 10773 { |
5872
6389c826f847
(x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents:
5825
diff
changeset
|
10774 BLOCK_INPUT; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10775 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
|
10776 UNBLOCK_INPUT; |
80a5aedfb4c7
(XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents:
12192
diff
changeset
|
10777 } |
80a5aedfb4c7
(XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents:
12192
diff
changeset
|
10778 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10779 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10780 /* 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
|
10781 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
|
10782 |
21514 | 10783 void |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10784 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
|
10785 struct frame *f; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10786 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10787 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
|
10788 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10789 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10790 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10791 /* 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
|
10792 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
|
10793 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10794 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10795 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
|
10796 struct window *w; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10797 int on_p; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10798 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10799 while (w) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10800 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10801 if (!NILP (w->hchild)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10802 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
|
10803 else if (!NILP (w->vchild)) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10804 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
|
10805 else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10806 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
|
10807 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10808 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
|
10809 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10810 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10811 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10812 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10813 /* 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
|
10814 of ON. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10815 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10816 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10817 x_update_window_cursor (w, on) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10818 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
|
10819 int on; |
80a5aedfb4c7
(XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents:
12192
diff
changeset
|
10820 { |
28183
7d97c6fbc3d9
(x_update_window_cursor): Don't update in frames
Gerd Moellmann <gerd@gnu.org>
parents:
28142
diff
changeset
|
10821 /* 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
|
10822 of being deleted. */ |
7d97c6fbc3d9
(x_update_window_cursor): Don't update in frames
Gerd Moellmann <gerd@gnu.org>
parents:
28142
diff
changeset
|
10823 if (w->current_matrix) |
7d97c6fbc3d9
(x_update_window_cursor): Don't update in frames
Gerd Moellmann <gerd@gnu.org>
parents:
28142
diff
changeset
|
10824 { |
7d97c6fbc3d9
(x_update_window_cursor): Don't update in frames
Gerd Moellmann <gerd@gnu.org>
parents:
28142
diff
changeset
|
10825 BLOCK_INPUT; |
7d97c6fbc3d9
(x_update_window_cursor): Don't update in frames
Gerd Moellmann <gerd@gnu.org>
parents:
28142
diff
changeset
|
10826 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
|
10827 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
|
10828 UNBLOCK_INPUT; |
7d97c6fbc3d9
(x_update_window_cursor): Don't update in frames
Gerd Moellmann <gerd@gnu.org>
parents:
28142
diff
changeset
|
10829 } |
286 | 10830 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10831 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10832 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10833 |
286 | 10834 |
10835 /* Icons. */ | |
10836 | |
771 | 10837 /* 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
|
10838 when we get an expose event for it. */ |
286 | 10839 |
21514 | 10840 void |
771 | 10841 refreshicon (f) |
10842 struct frame *f; | |
286 | 10843 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10844 /* Normally, the window manager handles this function. */ |
286 | 10845 } |
10846 | |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
10847 /* Make the x-window of frame F use the gnu icon bitmap. */ |
286 | 10848 |
10849 int | |
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
10850 x_bitmap_icon (f, file) |
771 | 10851 struct frame *f; |
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
10852 Lisp_Object file; |
286 | 10853 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10854 int bitmap_id; |
286 | 10855 |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
10856 if (FRAME_X_WINDOW (f) == 0) |
286 | 10857 return 1; |
10858 | |
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
10859 /* 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
|
10860 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
|
10861 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
|
10862 f->output_data.x->icon_bitmap = 0; |
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
10863 |
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
10864 if (STRINGP (file)) |
9542
f8b7a65a94bc
(x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents:
9537
diff
changeset
|
10865 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
|
10866 else |
f8b7a65a94bc
(x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents:
9537
diff
changeset
|
10867 { |
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
10868 /* 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
|
10869 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
|
10870 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
|
10871 = 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
|
10872 gnu_width, gnu_height); |
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
10873 |
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
10874 /* 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
|
10875 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
|
10876 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
|
10877 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
|
10878 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
|
10879 |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
10880 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
|
10881 } |
f8b7a65a94bc
(x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents:
9537
diff
changeset
|
10882 |
f8b7a65a94bc
(x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents:
9537
diff
changeset
|
10883 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
|
10884 f->output_data.x->icon_bitmap = bitmap_id; |
286 | 10885 |
10886 return 0; | |
10887 } | |
10888 | |
10889 | |
12074
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10890 /* 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
|
10891 Use ICON_NAME as the text. */ |
286 | 10892 |
10893 int | |
771 | 10894 x_text_icon (f, icon_name) |
10895 struct frame *f; | |
286 | 10896 char *icon_name; |
10897 { | |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
10898 if (FRAME_X_WINDOW (f) == 0) |
286 | 10899 return 1; |
10900 | |
12074
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10901 #ifdef HAVE_X11R4 |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10902 { |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10903 XTextProperty text; |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10904 text.value = (unsigned char *) icon_name; |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10905 text.encoding = XA_STRING; |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10906 text.format = 8; |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10907 text.nitems = strlen (icon_name); |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10908 #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
|
10909 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
|
10910 &text); |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10911 #else /* not USE_X_TOOLKIT */ |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10912 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
|
10913 #endif /* not USE_X_TOOLKIT */ |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10914 } |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10915 #else /* not HAVE_X11R4 */ |
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10916 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
|
10917 #endif /* not HAVE_X11R4 */ |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
10918 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
10919 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
|
10920 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
|
10921 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
|
10922 x_wm_set_icon_pixmap (f, 0); |
286 | 10923 |
10924 return 0; | |
10925 } | |
10926 | |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10927 #define X_ERROR_MESSAGE_SIZE 200 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10928 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10929 /* If non-nil, this should be a string. |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10930 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
|
10931 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10932 static Lisp_Object x_error_message_string; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10933 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10934 /* 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
|
10935 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
|
10936 x_catch_errors is in effect. */ |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10937 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10938 static void |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10939 x_error_catcher (display, error) |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10940 Display *display; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10941 XErrorEvent *error; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10942 { |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10943 XGetErrorText (display, error->error_code, |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10944 XSTRING (x_error_message_string)->data, |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10945 X_ERROR_MESSAGE_SIZE); |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10946 } |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10947 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10948 /* 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
|
10949 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
|
10950 operating on. |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10951 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10952 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
|
10953 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
|
10954 stored in x_error_message_string. |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10955 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10956 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
|
10957 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
|
10958 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10959 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
|
10960 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10961 void x_check_errors (); |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10962 static Lisp_Object x_catch_errors_unwind (); |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10963 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10964 int |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10965 x_catch_errors (dpy) |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10966 Display *dpy; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10967 { |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10968 int count = specpdl_ptr - specpdl; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10969 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10970 /* 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
|
10971 XSync (dpy, False); |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10972 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10973 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
|
10974 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10975 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
|
10976 XSTRING (x_error_message_string)->data[0] = 0; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10977 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10978 return count; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10979 } |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10980 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10981 /* 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
|
10982 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10983 static Lisp_Object |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10984 x_catch_errors_unwind (old_val) |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10985 Lisp_Object old_val; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10986 { |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10987 x_error_message_string = old_val; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10988 return Qnil; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10989 } |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10990 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10991 /* 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
|
10992 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
|
10993 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
|
10994 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10995 void |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10996 x_check_errors (dpy, format) |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10997 Display *dpy; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10998 char *format; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10999 { |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11000 /* 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
|
11001 XSync (dpy, False); |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11002 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11003 if (XSTRING (x_error_message_string)->data[0]) |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11004 error (format, XSTRING (x_error_message_string)->data); |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11005 } |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11006 |
17953
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11007 /* 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
|
11008 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
|
11009 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11010 int |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11011 x_had_errors_p (dpy) |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11012 Display *dpy; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11013 { |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11014 /* 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
|
11015 XSync (dpy, False); |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11016 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11017 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
|
11018 } |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11019 |
17953
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11020 /* 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
|
11021 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11022 void |
17953
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11023 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
|
11024 Display *dpy; |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11025 { |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11026 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
|
11027 } |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11028 |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11029 /* 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
|
11030 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
|
11031 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
|
11032 the corresponding call to x_catch_errors. */ |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11033 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11034 void |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11035 x_uncatch_errors (dpy, count) |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11036 Display *dpy; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11037 int count; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11038 { |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11039 unbind_to (count, Qnil); |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11040 } |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11041 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11042 #if 0 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11043 static unsigned int x_wire_count; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11044 x_trace_wire () |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11045 { |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11046 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
|
11047 } |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11048 #endif /* ! 0 */ |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11049 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11050 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11051 /* 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
|
11052 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
|
11053 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
|
11054 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
|
11055 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
|
11056 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11057 static SIGTYPE |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11058 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
|
11059 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
|
11060 { |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11061 #ifdef USG |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11062 /* USG systems forget handlers when they are used; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11063 must reestablish each time */ |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11064 signal (signalnum, x_connection_signal); |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11065 #endif /* USG */ |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11066 } |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11067 |
621 | 11068 /* Handling X errors. */ |
11069 | |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
11070 /* 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
|
11071 |
621 | 11072 static SIGTYPE |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
11073 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
|
11074 Display *display; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
11075 char *error_message; |
621 | 11076 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
11077 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
|
11078 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
|
11079 |
14489
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
11080 /* 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
|
11081 |
28030
c5b68e855d56
(x_connection_closed) [USE_X_TOOLKIT]: Don't try to
Gerd Moellmann <gerd@gnu.org>
parents:
27991
diff
changeset
|
11082 #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
|
11083 #ifdef USE_X_TOOLKIT |
16179
7f8ce4d3e955
(x_connection_closed): Call XtCloseDisplay.
Richard M. Stallman <rms@gnu.org>
parents:
16104
diff
changeset
|
11084 XtCloseDisplay (display); |
17825
281d99590839
(dumpglyphs): Draw glyphs one by one if the font for
Kenichi Handa <handa@m17n.org>
parents:
17720
diff
changeset
|
11085 #endif |
28030
c5b68e855d56
(x_connection_closed) [USE_X_TOOLKIT]: Don't try to
Gerd Moellmann <gerd@gnu.org>
parents:
27991
diff
changeset
|
11086 #endif |
16179
7f8ce4d3e955
(x_connection_closed): Call XtCloseDisplay.
Richard M. Stallman <rms@gnu.org>
parents:
16104
diff
changeset
|
11087 |
29536
4def8a9e785a
* xterm.c (x_connection_closed): If dpyinfo is NULL, don't try to
Ken Raeburn <raeburn@raeburn.org>
parents:
29512
diff
changeset
|
11088 if (dpyinfo) |
4def8a9e785a
* xterm.c (x_connection_closed): If dpyinfo is NULL, don't try to
Ken Raeburn <raeburn@raeburn.org>
parents:
29512
diff
changeset
|
11089 dpyinfo->display = 0; |
14489
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
11090 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11091 /* 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
|
11092 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
|
11093 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
|
11094 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
11095 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
|
11096 minibuf_frame |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
11097 = 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
|
11098 if (FRAME_X_P (XFRAME (frame)) |
bf33c9179a6b
(x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents:
10755
diff
changeset
|
11099 && FRAME_X_P (XFRAME (minibuf_frame)) |
bf33c9179a6b
(x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents:
10755
diff
changeset
|
11100 && ! EQ (frame, minibuf_frame) |
bf33c9179a6b
(x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents:
10755
diff
changeset
|
11101 && 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
|
11102 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
|
11103 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
11104 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
11105 /* 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
|
11106 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
|
11107 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
|
11108 FOR_EACH_FRAME (tail, frame) |
10921
bf33c9179a6b
(x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents:
10755
diff
changeset
|
11109 if (FRAME_X_P (XFRAME (frame)) |
bf33c9179a6b
(x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents:
10755
diff
changeset
|
11110 && 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
|
11111 { |
0d37c1e81c0d
(x_connection_closed): Unblock input, first thing.
Karl Heuer <kwzh@gnu.org>
parents:
11901
diff
changeset
|
11112 /* 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
|
11113 trying to find a replacement. */ |
0d37c1e81c0d
(x_connection_closed): Unblock input, first thing.
Karl Heuer <kwzh@gnu.org>
parents:
11901
diff
changeset
|
11114 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
|
11115 Fdelete_frame (frame, Qt); |
0d37c1e81c0d
(x_connection_closed): Unblock input, first thing.
Karl Heuer <kwzh@gnu.org>
parents:
11901
diff
changeset
|
11116 } |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
11117 |
13727
9eb09adbcb38
(x_connection_closed): Don't delete dpyinfo if it's null.
Karl Heuer <kwzh@gnu.org>
parents:
13633
diff
changeset
|
11118 if (dpyinfo) |
9eb09adbcb38
(x_connection_closed): Don't delete dpyinfo if it's null.
Karl Heuer <kwzh@gnu.org>
parents:
13633
diff
changeset
|
11119 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
|
11120 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
11121 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
|
11122 { |
15515
69257ac25af4
(x_connection_closed): Add newline when printing error message on stderr.
Richard M. Stallman <rms@gnu.org>
parents:
15514
diff
changeset
|
11123 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
|
11124 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
|
11125 exit (70); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
11126 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
11127 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
11128 /* 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
|
11129 #ifdef SIGIO |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
11130 sigunblock (sigmask (SIGIO)); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
11131 #endif |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
11132 sigunblock (sigmask (SIGALRM)); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
11133 TOTALLY_UNBLOCK_INPUT; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
11134 |
15526
926ef4afc174
(x_connection_closed): Call clear_waiting_for_input.
Richard M. Stallman <rms@gnu.org>
parents:
15521
diff
changeset
|
11135 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
|
11136 error ("%s", error_message); |
621 | 11137 } |
11138 | |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
11139 /* 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
|
11140 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
|
11141 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
|
11142 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11143 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
|
11144 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
|
11145 Display *display; |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
11146 XErrorEvent *error; |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
11147 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
11148 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
|
11149 |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
11150 /* 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
|
11151 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
|
11152 |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
11153 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
|
11154 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
|
11155 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
|
11156 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
|
11157 } |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
11158 |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11159 /* 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
|
11160 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
|
11161 |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11162 static int |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11163 x_error_handler (display, error) |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11164 Display *display; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11165 XErrorEvent *error; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11166 { |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11167 if (! NILP (x_error_message_string)) |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11168 x_error_catcher (display, error); |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11169 else |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11170 x_error_quitter (display, error); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11171 return 0; |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11172 } |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
11173 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
11174 /* 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
|
11175 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
|
11176 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
|
11177 |
1875
f569bc4e9b8f
* xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents:
1841
diff
changeset
|
11178 static int |
f569bc4e9b8f
* xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents:
1841
diff
changeset
|
11179 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
|
11180 Display *display; |
f569bc4e9b8f
* xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents:
1841
diff
changeset
|
11181 { |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
11182 char buf[256]; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
11183 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
11184 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
|
11185 x_connection_closed (display, buf); |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11186 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
|
11187 } |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
11188 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
11189 /* 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
|
11190 |
8291
9c6ddd14996b
(struct font_info): New field full_name.
Richard M. Stallman <rms@gnu.org>
parents:
8279
diff
changeset
|
11191 /* 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
|
11192 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
|
11193 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
|
11194 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
|
11195 |
3076
e3b3c67cf203
Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents:
3066
diff
changeset
|
11196 Lisp_Object |
771 | 11197 x_new_font (f, fontname) |
11198 struct frame *f; | |
286 | 11199 register char *fontname; |
11200 { | |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11201 struct font_info *fontp |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
11202 = 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
|
11203 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11204 if (!fontp) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11205 return Qnil; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11206 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11207 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
|
11208 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
|
11209 f->output_data.x->fontset = -1; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11210 |
9167
8ad448b29c1c
(x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents:
9101
diff
changeset
|
11211 /* 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
|
11212 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
|
11213 { |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11214 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
|
11215 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
|
11216 } |
8ad448b29c1c
(x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents:
9101
diff
changeset
|
11217 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
|
11218 { |
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
|
11219 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
|
11220 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
|
11221 } |
9167
8ad448b29c1c
(x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents:
9101
diff
changeset
|
11222 |
771 | 11223 /* 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
|
11224 if (FRAME_X_WINDOW (f) != 0) |
286 | 11225 { |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11226 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
|
11227 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
|
11228 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
|
11229 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
|
11230 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
|
11231 f->output_data.x->font->fid); |
771 | 11232 |
6767
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
11233 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
|
11234 x_set_window_size (f, 0, f->width, f->height); |
286 | 11235 } |
6767
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
11236 else |
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
11237 /* 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
|
11238 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
|
11239 f->output_data.x->line_height = FONT_HEIGHT (f->output_data.x->font); |
286 | 11240 |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11241 return build_string (fontp->full_name); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11242 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11243 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11244 /* 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
|
11245 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
|
11246 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
|
11247 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
|
11248 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11249 Lisp_Object |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11250 x_new_fontset (f, fontsetname) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11251 struct frame *f; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11252 char *fontsetname; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11253 { |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
11254 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
|
11255 Lisp_Object result; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11256 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11257 if (fontset < 0) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11258 return Qnil; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11259 |
18347
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
11260 if (f->output_data.x->fontset == fontset) |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
11261 /* 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
|
11262 to do. */ |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
11263 return fontset_name (fontset); |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
11264 |
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
11265 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
|
11266 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11267 if (!STRINGP (result)) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11268 /* Can't load ASCII font. */ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11269 return Qnil; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11270 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11271 /* 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
|
11272 f->output_data.x->fontset = fontset; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11273 |
27500
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11274 #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
|
11275 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
|
11276 && (FRAME_XIC_STYLE (f) & (XIMPreeditPosition | XIMStatusArea))) |
28231
076ed36c3101
Include fontset.h after dispextern.h.
Kenichi Handa <handa@m17n.org>
parents:
28183
diff
changeset
|
11277 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
|
11278 #endif |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11279 |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11280 return build_string (fontsetname); |
286 | 11281 } |
27500
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11282 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11283 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11284 /*********************************************************************** |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11285 X Input Methods |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11286 ***********************************************************************/ |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11287 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11288 #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
|
11289 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11290 #ifdef HAVE_X11R6 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11291 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11292 /* 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
|
11293 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
|
11294 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
|
11295 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11296 static void |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11297 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
|
11298 XIM xim; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11299 XPointer client_data; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11300 XPointer call_data; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11301 { |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11302 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
|
11303 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
|
11304 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11305 BLOCK_INPUT; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11306 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11307 /* 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
|
11308 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
|
11309 { |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11310 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
|
11311 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
|
11312 { |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11313 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
|
11314 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
|
11315 { |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11316 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
|
11317 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
|
11318 } |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11319 } |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11320 } |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11321 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11322 /* 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
|
11323 dpyinfo->xim = NULL; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11324 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
|
11325 UNBLOCK_INPUT; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11326 } |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11327 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11328 #endif /* HAVE_X11R6 */ |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11329 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11330 /* 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
|
11331 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
|
11332 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11333 static void |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11334 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
|
11335 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
|
11336 char *resource_name; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11337 { |
29948
bf5da5d2d690
(xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents:
29894
diff
changeset
|
11338 #ifdef USE_XIM |
27500
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11339 XIM xim; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11340 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11341 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
|
11342 dpyinfo->xim = xim; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11343 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11344 if (xim) |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11345 { |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11346 #ifdef HAVE_X11R6 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11347 XIMCallback destroy; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11348 #endif |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11349 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11350 /* 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
|
11351 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
|
11352 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11353 #ifdef HAVE_X11R6 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11354 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
|
11355 destroy.client_data = (XPointer)dpyinfo; |
29894
691fe247f018
Don't include sys/types.h unconditionally. Don't protect its inclusion
Dave Love <fx@gnu.org>
parents:
29749
diff
changeset
|
11356 /* This isn't prptotyped in OSF 5.0. */ |
27500
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11357 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
|
11358 #endif |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11359 } |
29948
bf5da5d2d690
(xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents:
29894
diff
changeset
|
11360 |
bf5da5d2d690
(xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents:
29894
diff
changeset
|
11361 #else /* not USE_XIM */ |
bf5da5d2d690
(xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents:
29894
diff
changeset
|
11362 dpyinfo->xim = NULL; |
bf5da5d2d690
(xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents:
29894
diff
changeset
|
11363 #endif /* not USE_XIM */ |
27500
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11364 } |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11365 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11366 |
28142
156c32f18198
(xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents:
28139
diff
changeset
|
11367 #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
|
11368 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11369 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
|
11370 { |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11371 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
|
11372 char *resource_name; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11373 }; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11374 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11375 /* 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
|
11376 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
|
11377 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
|
11378 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
|
11379 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11380 static void |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11381 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
|
11382 Display *display; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11383 XPointer client_data; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11384 XPointer call_data; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11385 { |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11386 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
|
11387 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
|
11388 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11389 /* 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
|
11390 if (dpyinfo->xim) |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11391 return; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11392 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11393 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
|
11394 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11395 /* 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
|
11396 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
|
11397 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
|
11398 { |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11399 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
|
11400 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11401 BLOCK_INPUT; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11402 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
|
11403 { |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11404 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
|
11405 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11406 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
|
11407 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
|
11408 { |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11409 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
|
11410 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
|
11411 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
|
11412 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
|
11413 { |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11414 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
|
11415 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
|
11416 } |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11417 } |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11418 } |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11419 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11420 UNBLOCK_INPUT; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11421 } |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11422 } |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11423 |
28142
156c32f18198
(xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents:
28139
diff
changeset
|
11424 #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
|
11425 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11426 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11427 /* 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
|
11428 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
|
11429 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
|
11430 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
|
11431 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11432 static void |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11433 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
|
11434 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
|
11435 char *resource_name; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11436 { |
29948
bf5da5d2d690
(xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents:
29894
diff
changeset
|
11437 #ifdef USE_XIM |
28142
156c32f18198
(xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents:
28139
diff
changeset
|
11438 #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
|
11439 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
|
11440 int len; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11441 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11442 dpyinfo->xim = NULL; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11443 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
|
11444 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
|
11445 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
|
11446 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
|
11447 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
|
11448 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
|
11449 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
|
11450 xim_instantiate_callback, |
29435
28c6b6d0ed6b
(x_calc_absolute_position): Declare nchildren unsigned.
Dave Love <fx@gnu.org>
parents:
29393
diff
changeset
|
11451 /* Fixme: This is XPointer in |
28c6b6d0ed6b
(x_calc_absolute_position): Declare nchildren unsigned.
Dave Love <fx@gnu.org>
parents:
29393
diff
changeset
|
11452 XFree86 but (XPointer *) on |
28c6b6d0ed6b
(x_calc_absolute_position): Declare nchildren unsigned.
Dave Love <fx@gnu.org>
parents:
29393
diff
changeset
|
11453 Tru64, at least. */ |
28c6b6d0ed6b
(x_calc_absolute_position): Declare nchildren unsigned.
Dave Love <fx@gnu.org>
parents:
29393
diff
changeset
|
11454 (XPointer) xim_inst); |
28142
156c32f18198
(xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents:
28139
diff
changeset
|
11455 #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
|
11456 dpyinfo->xim = NULL; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11457 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
|
11458 #endif /* not HAVE_X11R6_XIM */ |
29948
bf5da5d2d690
(xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents:
29894
diff
changeset
|
11459 |
bf5da5d2d690
(xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents:
29894
diff
changeset
|
11460 #else /* not USE_XIM */ |
bf5da5d2d690
(xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents:
29894
diff
changeset
|
11461 dpyinfo->xim = NULL; |
bf5da5d2d690
(xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents:
29894
diff
changeset
|
11462 #endif /* not USE_XIM */ |
27500
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11463 } |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11464 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11465 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11466 /* 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
|
11467 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11468 static void |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11469 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
|
11470 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
|
11471 { |
29948
bf5da5d2d690
(xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents:
29894
diff
changeset
|
11472 #ifdef USE_XIM |
28142
156c32f18198
(xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents:
28139
diff
changeset
|
11473 #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
|
11474 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
|
11475 NULL, EMACS_CLASS, |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11476 xim_instantiate_callback, NULL); |
28142
156c32f18198
(xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents:
28139
diff
changeset
|
11477 #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
|
11478 XCloseIM (dpyinfo->xim); |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11479 dpyinfo->xim = NULL; |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11480 XFree (dpyinfo->xim_styles); |
29948
bf5da5d2d690
(xim_initialize) [!USE_XIM]: Don't set up the
Gerd Moellmann <gerd@gnu.org>
parents:
29894
diff
changeset
|
11481 #endif /* USE_XIM */ |
27500
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11482 } |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11483 |
28142
156c32f18198
(xim_close_dpy, xim_initialize): Use X11R6-style XIM
Gerd Moellmann <gerd@gnu.org>
parents:
28139
diff
changeset
|
11484 #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
|
11485 |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
11486 |
286 | 11487 |
14826
eec0abb31126
Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents:
14801
diff
changeset
|
11488 /* Calculate the absolute position in frame F |
eec0abb31126
Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents:
14801
diff
changeset
|
11489 from its current recorded position values and gravity. */ |
eec0abb31126
Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents:
14801
diff
changeset
|
11490 |
21514 | 11491 void |
7264
a701bffa0f9d
(x_calc_absolute_position): Use size_hint_flags.
Richard M. Stallman <rms@gnu.org>
parents:
7262
diff
changeset
|
11492 x_calc_absolute_position (f) |
771 | 11493 struct frame *f; |
286 | 11494 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11495 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
|
11496 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
|
11497 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
|
11498 int this_window; |
507a45c7e911
(x_calc_absolute_position): Use menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11807
diff
changeset
|
11499 |
17953
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11500 /* 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
|
11501 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
|
11502 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
|
11503 return; |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11504 |
11896
507a45c7e911
(x_calc_absolute_position): Use menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11807
diff
changeset
|
11505 #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
|
11506 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
|
11507 #else |
507a45c7e911
(x_calc_absolute_position): Use menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11807
diff
changeset
|
11508 this_window = FRAME_X_WINDOW (f); |
507a45c7e911
(x_calc_absolute_position): Use menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11807
diff
changeset
|
11509 #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
|
11510 |
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
11511 /* 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
|
11512 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
|
11513 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
|
11514 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
|
11515 { |
17953
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11516 int count; |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11517 |
4630
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
11518 BLOCK_INPUT; |
17953
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11519 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
|
11520 while (1) |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11521 { |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11522 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
|
11523 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
|
11524 |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11525 /* 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
|
11526 this_window, |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11527 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
|
11528 |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11529 /* 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
|
11530 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
|
11531 |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11532 /* Child of win. */ |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11533 &child); |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11534 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
|
11535 { |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11536 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
|
11537 Window *newchildren; |
29435
28c6b6d0ed6b
(x_calc_absolute_position): Declare nchildren unsigned.
Dave Love <fx@gnu.org>
parents:
29393
diff
changeset
|
11538 unsigned int nchildren; |
17953
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11539 |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11540 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
|
11541 &newparent, &newchildren, &nchildren)) |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11542 break; |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11543 |
23107
44eda932afcf
(x_calc_absolute_position): Cast argument to XFree, in
Karl Heuer <kwzh@gnu.org>
parents:
23095
diff
changeset
|
11544 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
|
11545 |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11546 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
|
11547 } |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11548 else |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11549 break; |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11550 } |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11551 |
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11552 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
|
11553 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
|
11554 } |
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
11555 |
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
11556 /* 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
|
11557 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
|
11558 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
|
11559 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
|
11560 - 2 * f->output_data.x->border_width - win_x |
eec0abb31126
Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents:
14801
diff
changeset
|
11561 - PIXEL_WIDTH (f) |
eec0abb31126
Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents:
14801
diff
changeset
|
11562 + f->output_data.x->left_pos); |
771 | 11563 |
7262
68fc80bf10df
(x_wm_set_size_hint): Don't try to handle negative positions.
Richard M. Stallman <rms@gnu.org>
parents:
7210
diff
changeset
|
11564 if (flags & YNegative) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11565 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11566 int menubar_height = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11567 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11568 #ifdef USE_X_TOOLKIT |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11569 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
|
11570 menubar_height |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11571 = (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
|
11572 + 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
|
11573 #endif |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11574 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11575 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
|
11576 - 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
|
11577 - win_y |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11578 - PIXEL_HEIGHT (f) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11579 - menubar_height |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11580 + f->output_data.x->top_pos); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11581 } |
14826
eec0abb31126
Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents:
14801
diff
changeset
|
11582 |
7409
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
11583 /* 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
|
11584 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
|
11585 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
|
11586 f->output_data.x->size_hint_flags &= ~ (XNegative | YNegative); |
286 | 11587 } |
11588 | |
7409
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
11589 /* 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
|
11590 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
|
11591 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
|
11592 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
|
11593 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
|
11594 |
21514 | 11595 void |
6934
e0ab4f59004e
(dumpglyphs): When HL=2, check explicitly for using
Richard M. Stallman <rms@gnu.org>
parents:
6883
diff
changeset
|
11596 x_set_offset (f, xoff, yoff, change_gravity) |
771 | 11597 struct frame *f; |
286 | 11598 register int xoff, yoff; |
6934
e0ab4f59004e
(dumpglyphs): When HL=2, check explicitly for using
Richard M. Stallman <rms@gnu.org>
parents:
6883
diff
changeset
|
11599 int change_gravity; |
286 | 11600 { |
11901
8ecc60a02138
(x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents:
11896
diff
changeset
|
11601 int modified_top, modified_left; |
8ecc60a02138
(x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents:
11896
diff
changeset
|
11602 |
11988
a1ce6f699967
(x_set_offset): Distinguish CHANGE_GRAVITY < 0 case.
Karl Heuer <kwzh@gnu.org>
parents:
11953
diff
changeset
|
11603 if (change_gravity > 0) |
7409
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
11604 { |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11605 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
|
11606 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
|
11607 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
|
11608 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
|
11609 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
|
11610 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
|
11611 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
|
11612 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
|
11613 } |
7264
a701bffa0f9d
(x_calc_absolute_position): Use size_hint_flags.
Richard M. Stallman <rms@gnu.org>
parents:
7262
diff
changeset
|
11614 x_calc_absolute_position (f); |
286 | 11615 |
11616 BLOCK_INPUT; | |
11915
e2ab839155e1
(XTflash): Use pointers as args to select.
Karl Heuer <kwzh@gnu.org>
parents:
11904
diff
changeset
|
11617 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
|
11618 |
17519
5aa7011aa3d5
(x_set_offset): Turn off the code that added the border_width
Richard M. Stallman <rms@gnu.org>
parents:
17371
diff
changeset
|
11619 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
|
11620 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
|
11621 #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
|
11622 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
|
11623 /* 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
|
11624 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
|
11625 if (change_gravity != 0) |
11901
8ecc60a02138
(x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents:
11896
diff
changeset
|
11626 { |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11627 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
|
11628 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
|
11629 } |
17519
5aa7011aa3d5
(x_set_offset): Turn off the code that added the border_width
Richard M. Stallman <rms@gnu.org>
parents:
17371
diff
changeset
|
11630 #endif |
11901
8ecc60a02138
(x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents:
11896
diff
changeset
|
11631 |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11632 #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
|
11633 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
|
11634 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
|
11635 #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
|
11636 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
|
11637 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
|
11638 #endif /* not USE_X_TOOLKIT */ |
286 | 11639 UNBLOCK_INPUT; |
11640 } | |
11641 | |
5825
b1f35db748d8
(x_make_frame_invisible): Add USE_X_TOOLKIT conditional.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5753
diff
changeset
|
11642 /* 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
|
11643 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
|
11644 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
|
11645 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
|
11646 |
21514 | 11647 void |
5825
b1f35db748d8
(x_make_frame_invisible): Add USE_X_TOOLKIT conditional.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5753
diff
changeset
|
11648 x_set_window_size (f, change_gravity, cols, rows) |
771 | 11649 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
|
11650 int change_gravity; |
976
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
11651 int cols, rows; |
286 | 11652 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11653 #ifndef USE_X_TOOLKIT |
286 | 11654 int pixelwidth, pixelheight; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11655 #endif |
14692
e93656946a8c
(x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents:
14557
diff
changeset
|
11656 |
e93656946a8c
(x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents:
14557
diff
changeset
|
11657 BLOCK_INPUT; |
286 | 11658 |
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
|
11659 #ifdef USE_X_TOOLKIT |
7415
fbea5637a4b4
(x_set_window_size) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents:
7409
diff
changeset
|
11660 { |
fbea5637a4b4
(x_set_window_size) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents:
7409
diff
changeset
|
11661 /* 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
|
11662 call to XtSetValues within EmacsFrameSetCharSize. |
fbea5637a4b4
(x_set_window_size) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents:
7409
diff
changeset
|
11663 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
|
11664 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
|
11665 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
|
11666 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
|
11667 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
|
11668 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
|
11669 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
|
11670 } |
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
|
11671 |
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
|
11672 #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
|
11673 |
976
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
11674 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
|
11675 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
|
11676 = (!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
|
11677 ? 0 |
8ad448b29c1c
(x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents:
9101
diff
changeset
|
11678 : 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
|
11679 ? 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
|
11680 : (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
|
11681 f->output_data.x->flags_areas_extra |
25465 | 11682 = 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
|
11683 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
|
11684 pixelheight = CHAR_TO_PIXEL_HEIGHT (f, rows); |
286 | 11685 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11686 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
|
11687 x_wm_set_size_hint (f, (long) 0, 0); |
8781
98741404d3e0
Delete X11 conditionals.
Richard M. Stallman <rms@gnu.org>
parents:
8724
diff
changeset
|
11688 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11689 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
|
11690 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
|
11691 pixelwidth, pixelheight); |
976
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
11692 |
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
11693 /* 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
|
11694 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
|
11695 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
|
11696 ConfigureNotify event gets here. |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11697 |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11698 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
|
11699 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
|
11700 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
|
11701 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
|
11702 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
|
11703 |
1c02364724aa
(x_set_window_size): When calling change_frame_size, specify 1 for DELAY.
Richard M. Stallman <rms@gnu.org>
parents:
25101
diff
changeset
|
11704 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
|
11705 a BLOCK_INPUT. */ |
25360
2f3ad0a21be5
Call change_frame_size and do_pending_window_change with
Gerd Moellmann <gerd@gnu.org>
parents:
25328
diff
changeset
|
11706 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
|
11707 PIXEL_WIDTH (f) = pixelwidth; |
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
11708 PIXEL_HEIGHT (f) = pixelheight; |
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
11709 |
14692
e93656946a8c
(x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents:
14557
diff
changeset
|
11710 /* 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
|
11711 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
|
11712 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
|
11713 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
|
11714 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
|
11715 |
e93656946a8c
(x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents:
14557
diff
changeset
|
11716 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
|
11717 |
e93656946a8c
(x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents:
14557
diff
changeset
|
11718 #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
|
11719 |
7651
1569a13efdcd
(x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents:
7602
diff
changeset
|
11720 /* 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
|
11721 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
|
11722 |
14692
e93656946a8c
(x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents:
14557
diff
changeset
|
11723 /* 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
|
11724 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
|
11725 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
|
11726 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
|
11727 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
|
11728 |
286 | 11729 UNBLOCK_INPUT; |
11730 } | |
11731 | |
12172
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
11732 /* Mouse warping. */ |
286 | 11733 |
7026
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
11734 void |
771 | 11735 x_set_mouse_position (f, x, y) |
11736 struct frame *f; | |
286 | 11737 int x, y; |
11738 { | |
11739 int pix_x, pix_y; | |
11740 | |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11741 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
|
11742 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
|
11743 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
11744 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
|
11745 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
|
11746 |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
11747 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
|
11748 if (pix_y > PIXEL_HEIGHT (f)) pix_y = PIXEL_HEIGHT (f); |
286 | 11749 |
11750 BLOCK_INPUT; | |
11751 | |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11752 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
|
11753 0, 0, 0, 0, pix_x, pix_y); |
286 | 11754 UNBLOCK_INPUT; |
11755 } | |
11756 | |
7026
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
11757 /* 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
|
11758 |
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
11759 void |
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
11760 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
|
11761 struct frame *f; |
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
11762 int pix_x, pix_y; |
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
11763 { |
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
11764 BLOCK_INPUT; |
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
11765 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11766 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
|
11767 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
|
11768 UNBLOCK_INPUT; |
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
11769 } |
12172
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
11770 |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
11771 /* focus shifting, raising and lowering. */ |
7026
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
11772 |
21514 | 11773 void |
771 | 11774 x_focus_on_frame (f) |
11775 struct frame *f; | |
286 | 11776 { |
5156
fd78458b8c43
(XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents:
5018
diff
changeset
|
11777 #if 0 /* This proves to be unpleasant. */ |
771 | 11778 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
|
11779 #endif |
369 | 11780 #if 0 |
11781 /* I don't think that the ICCCM allows programs to do things like this | |
11782 without the interaction of the window manager. Whatever you end up | |
771 | 11783 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
|
11784 XSetInputFocus (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
286 | 11785 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
|
11786 #endif /* ! 0 */ |
286 | 11787 } |
11788 | |
21514 | 11789 void |
771 | 11790 x_unfocus_frame (f) |
11791 struct frame *f; | |
286 | 11792 { |
369 | 11793 #if 0 |
771 | 11794 /* 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
|
11795 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
|
11796 XSetInputFocus (FRAME_X_DISPLAY (f), PointerRoot, |
286 | 11797 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
|
11798 #endif /* ! 0 */ |
286 | 11799 } |
11800 | |
771 | 11801 /* Raise frame F. */ |
11802 | |
21514 | 11803 void |
771 | 11804 x_raise_frame (f) |
11805 struct frame *f; | |
286 | 11806 { |
1658
452ba03935d7
* xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents:
1530
diff
changeset
|
11807 if (f->async_visible) |
286 | 11808 { |
11809 BLOCK_INPUT; | |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11810 #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
|
11811 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
|
11812 #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
|
11813 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
|
11814 #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
|
11815 XFlush (FRAME_X_DISPLAY (f)); |
286 | 11816 UNBLOCK_INPUT; |
11817 } | |
11818 } | |
11819 | |
771 | 11820 /* Lower frame F. */ |
11821 | |
21514 | 11822 void |
771 | 11823 x_lower_frame (f) |
11824 struct frame *f; | |
286 | 11825 { |
1658
452ba03935d7
* xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents:
1530
diff
changeset
|
11826 if (f->async_visible) |
286 | 11827 { |
11828 BLOCK_INPUT; | |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11829 #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
|
11830 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
|
11831 #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
|
11832 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
|
11833 #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
|
11834 XFlush (FRAME_X_DISPLAY (f)); |
286 | 11835 UNBLOCK_INPUT; |
11836 } | |
11837 } | |
11838 | |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11839 static void |
14411
bac274f178b0
(XTframe_raise_lower): Rename arg `raise' to `raise_flag'.
Richard M. Stallman <rms@gnu.org>
parents:
14305
diff
changeset
|
11840 XTframe_raise_lower (f, raise_flag) |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11841 FRAME_PTR f; |
14411
bac274f178b0
(XTframe_raise_lower): Rename arg `raise' to `raise_flag'.
Richard M. Stallman <rms@gnu.org>
parents:
14305
diff
changeset
|
11842 int raise_flag; |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11843 { |
14411
bac274f178b0
(XTframe_raise_lower): Rename arg `raise' to `raise_flag'.
Richard M. Stallman <rms@gnu.org>
parents:
14305
diff
changeset
|
11844 if (raise_flag) |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11845 x_raise_frame (f); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11846 else |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11847 x_lower_frame (f); |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11848 } |
12172
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
11849 |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
11850 /* Change of visibility. */ |
286 | 11851 |
12192
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
11852 /* 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
|
11853 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
|
11854 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
|
11855 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
|
11856 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
|
11857 finishes with it. */ |
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
11858 |
21514 | 11859 void |
771 | 11860 x_make_frame_visible (f) |
11861 struct frame *f; | |
286 | 11862 { |
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
11863 Lisp_Object type; |
17963
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11864 int original_top, original_left; |
31948
a6e9ef37895d
(x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents:
31864
diff
changeset
|
11865 int retry_count = 2; |
a6e9ef37895d
(x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents:
31864
diff
changeset
|
11866 |
a6e9ef37895d
(x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents:
31864
diff
changeset
|
11867 retry: |
286 | 11868 |
429 | 11869 BLOCK_INPUT; |
11870 | |
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
11871 type = x_icon_type (f); |
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
11872 if (!NILP (type)) |
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
11873 x_bitmap_icon (f, type); |
9446
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
11874 |
771 | 11875 if (! FRAME_VISIBLE_P (f)) |
286 | 11876 { |
17963
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11877 /* 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
|
11878 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
|
11879 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
|
11880 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
|
11881 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
|
11882 && ! 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
|
11883 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
|
11884 |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11885 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
|
11886 |
429 | 11887 if (! EQ (Vx_no_window_manager, Qt)) |
771 | 11888 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
|
11889 #ifdef USE_X_TOOLKIT |
7167
2fa74c48e4e5
(x_make_frame_visible): Use XtMapWidget, not XtPopup.
Richard M. Stallman <rms@gnu.org>
parents:
7128
diff
changeset
|
11890 /* 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
|
11891 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
|
11892 #else /* not USE_X_TOOLKIT */ |
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
11893 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
|
11894 #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
|
11895 #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
|
11896 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
|
11897 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
|
11898 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
|
11899 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
|
11900 #endif |
429 | 11901 } |
286 | 11902 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11903 XFlush (FRAME_X_DISPLAY (f)); |
429 | 11904 |
7959
224440646fa7
(make_frame_visible): At end, wait till Emacs sees frame is visible.
Richard M. Stallman <rms@gnu.org>
parents:
7935
diff
changeset
|
11905 /* 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
|
11906 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
|
11907 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
|
11908 { |
224440646fa7
(make_frame_visible): At end, wait till Emacs sees frame is visible.
Richard M. Stallman <rms@gnu.org>
parents:
7935
diff
changeset
|
11909 Lisp_Object frame; |
27040
900a02429efa
(x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents:
27000
diff
changeset
|
11910 int count; |
18528
73f4d9258f04
(x_make_frame_visible): Check has_been_visible
Richard M. Stallman <rms@gnu.org>
parents:
18347
diff
changeset
|
11911 /* 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
|
11912 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
|
11913 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
|
11914 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
|
11915 |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11916 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
|
11917 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
|
11918 |
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
11919 /* This must come after we set COUNT. */ |
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
11920 UNBLOCK_INPUT; |
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
11921 |
22907
43e290c6fb19
(x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents:
22773
diff
changeset
|
11922 /* 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
|
11923 |
18008
d25d2472df51
(XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents:
17963
diff
changeset
|
11924 /* 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
|
11925 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
|
11926 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
|
11927 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
|
11928 |
73f4d9258f04
(x_make_frame_visible): Check has_been_visible
Richard M. Stallman <rms@gnu.org>
parents:
18347
diff
changeset
|
11929 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
|
11930 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
|
11931 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
|
11932 |
18630
3e414b9da546
(x_make_frame_visible): Don't move the frame
Richard M. Stallman <rms@gnu.org>
parents:
18528
diff
changeset
|
11933 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
|
11934 && 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
|
11935 && previously_visible) |
17963
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11936 { |
22907
43e290c6fb19
(x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents:
22773
diff
changeset
|
11937 Drawable rootw; |
43e290c6fb19
(x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents:
22773
diff
changeset
|
11938 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
|
11939 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
|
11940 |
17963
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11941 BLOCK_INPUT; |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11942 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11943 /* 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
|
11944 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
|
11945 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
|
11946 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
|
11947 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
|
11948 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
|
11949 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
|
11950 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
|
11951 &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
|
11952 |
43e290c6fb19
(x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents:
22773
diff
changeset
|
11953 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
|
11954 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
|
11955 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
|
11956 |
17963
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11957 UNBLOCK_INPUT; |
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11958 } |
17953
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11959 |
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
11960 XSETFRAME (frame, f); |
9337
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
11961 |
27040
900a02429efa
(x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents:
27000
diff
changeset
|
11962 /* 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
|
11963 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
|
11964 MapNotify at all.. */ |
900a02429efa
(x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents:
27000
diff
changeset
|
11965 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
|
11966 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
|
11967 { |
27040
900a02429efa
(x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents:
27000
diff
changeset
|
11968 /* 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
|
11969 x_sync (f); |
27040
900a02429efa
(x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents:
27000
diff
changeset
|
11970 |
900a02429efa
(x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents:
27000
diff
changeset
|
11971 /* 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
|
11972 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
|
11973 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
|
11974 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
|
11975 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
|
11976 probably a bug. */ |
8682
42f95b1368ea
(x_make_frame_visible): Call input_polling_used.
Richard M. Stallman <rms@gnu.org>
parents:
8652
diff
changeset
|
11977 if (input_polling_used ()) |
8652 | 11978 { |
27040
900a02429efa
(x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents:
27000
diff
changeset
|
11979 /* 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
|
11980 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
|
11981 handler reset it. */ |
29600
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
11982 extern void poll_for_input_1 P_ ((void)); |
27428
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
11983 int old_poll_suppress_count = poll_suppress_count; |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
11984 poll_suppress_count = 1; |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
11985 poll_for_input_1 (); |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
11986 poll_suppress_count = old_poll_suppress_count; |
8652 | 11987 } |
27040
900a02429efa
(x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents:
27000
diff
changeset
|
11988 |
900a02429efa
(x_make_frame_visible): Wait for frame becoming visible
Gerd Moellmann <gerd@gnu.org>
parents:
27000
diff
changeset
|
11989 /* 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
|
11990 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
|
11991 } |
31948
a6e9ef37895d
(x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents:
31864
diff
changeset
|
11992 |
a6e9ef37895d
(x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents:
31864
diff
changeset
|
11993 /* 2000-09-28: In |
a6e9ef37895d
(x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents:
31864
diff
changeset
|
11994 |
a6e9ef37895d
(x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents:
31864
diff
changeset
|
11995 (let ((f (selected-frame))) |
a6e9ef37895d
(x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents:
31864
diff
changeset
|
11996 (iconify-frame f) |
a6e9ef37895d
(x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents:
31864
diff
changeset
|
11997 (raise-frame f)) |
a6e9ef37895d
(x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents:
31864
diff
changeset
|
11998 |
a6e9ef37895d
(x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents:
31864
diff
changeset
|
11999 the frame is not raised with various window managers on |
a6e9ef37895d
(x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents:
31864
diff
changeset
|
12000 FreeBSD, Linux and Solaris. It turns out that, for some |
a6e9ef37895d
(x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents:
31864
diff
changeset
|
12001 unknown reason, the call to XtMapWidget is completely ignored. |
a6e9ef37895d
(x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents:
31864
diff
changeset
|
12002 Mapping the widget a second time works. */ |
a6e9ef37895d
(x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents:
31864
diff
changeset
|
12003 |
a6e9ef37895d
(x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents:
31864
diff
changeset
|
12004 if (!FRAME_VISIBLE_P (f) && --retry_count > 0) |
a6e9ef37895d
(x_make_frame_visible): Try harder to make the frame
Gerd Moellmann <gerd@gnu.org>
parents:
31864
diff
changeset
|
12005 goto retry; |
7959
224440646fa7
(make_frame_visible): At end, wait till Emacs sees frame is visible.
Richard M. Stallman <rms@gnu.org>
parents:
7935
diff
changeset
|
12006 } |
286 | 12007 } |
12008 | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12009 /* Change from mapped state to withdrawn state. */ |
286 | 12010 |
12172
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
12011 /* Make the frame visible (mapped and not iconified). */ |
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
12012 |
21514 | 12013 void |
771 | 12014 x_make_frame_invisible (f) |
12015 struct frame *f; | |
286 | 12016 { |
7602
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
12017 Window window; |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
12018 |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
12019 #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
|
12020 /* 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
|
12021 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
|
12022 #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
|
12023 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
|
12024 #endif /* not USE_X_TOOLKIT */ |
286 | 12025 |
3284
a47979ffad1e
(XTread_socket): For UnmapNotify, if frame was visible,
Richard M. Stallman <rms@gnu.org>
parents:
3282
diff
changeset
|
12026 /* 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
|
12027 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
|
12028 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
|
12029 |
6983
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
12030 #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
|
12031 if (! f->async_visible && ! f->async_iconified) |
286 | 12032 return; |
6983
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
12033 #endif |
286 | 12034 |
12035 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
|
12036 |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
12037 /* 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
|
12038 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
|
12039 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
|
12040 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
|
12041 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
|
12042 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
|
12043 |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
12044 #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
|
12045 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12046 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
|
12047 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
|
12048 { |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
12049 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
|
12050 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
|
12051 } |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
12052 #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
|
12053 |
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
12054 /* Tell the window manager what we're going to do. */ |
286 | 12055 if (! EQ (Vx_no_window_manager, Qt)) |
12056 { | |
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
12057 XEvent unmap; |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
12058 |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
12059 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
|
12060 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
|
12061 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
|
12062 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
|
12063 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
|
12064 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
|
12065 False, |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12066 SubstructureRedirectMaskSubstructureNotifyMask, |
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
12067 &unmap)) |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
12068 { |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
12069 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
|
12070 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
|
12071 } |
286 | 12072 } |
12073 | |
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
12074 /* 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
|
12075 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
|
12076 #endif /* ! defined (HAVE_X11R4) */ |
286 | 12077 |
6983
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
12078 /* 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
|
12079 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
|
12080 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
|
12081 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
|
12082 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
|
12083 f->visible = 0; |
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
12084 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
|
12085 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
|
12086 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
|
12087 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12088 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
|
12089 |
286 | 12090 UNBLOCK_INPUT; |
12091 } | |
12092 | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12093 /* Change window state from mapped to iconified. */ |
286 | 12094 |
21514 | 12095 void |
771 | 12096 x_iconify_frame (f) |
12097 struct frame *f; | |
286 | 12098 { |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12099 int result; |
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
12100 Lisp_Object type; |
286 | 12101 |
3284
a47979ffad1e
(XTread_socket): For UnmapNotify, if frame was visible,
Richard M. Stallman <rms@gnu.org>
parents:
3282
diff
changeset
|
12102 /* 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
|
12103 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
|
12104 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
|
12105 |
1658
452ba03935d7
* xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents:
1530
diff
changeset
|
12106 if (f->async_iconified) |
286 | 12107 return; |
12108 | |
9446
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
12109 BLOCK_INPUT; |
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
12110 |
13627
8873aa3451dd
(XTmouse_position): Exit the loop if child == win.
Richard M. Stallman <rms@gnu.org>
parents:
13598
diff
changeset
|
12111 FRAME_SAMPLE_VISIBILITY (f); |
8873aa3451dd
(XTmouse_position): Exit the loop if child == win.
Richard M. Stallman <rms@gnu.org>
parents:
13598
diff
changeset
|
12112 |
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
12113 type = x_icon_type (f); |
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
12114 if (!NILP (type)) |
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
12115 x_bitmap_icon (f, type); |
9446
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
12116 |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12117 #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
|
12118 |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
12119 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
|
12120 { |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
12121 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
|
12122 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
|
12123 /* 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
|
12124 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
|
12125 /* 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
|
12126 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
|
12127 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
|
12128 f->iconified = 1; |
16753
ab63a77c3a23
(x_iconify_frame): Clear visible when we set iconified.
Richard M. Stallman <rms@gnu.org>
parents:
16491
diff
changeset
|
12129 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
|
12130 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
|
12131 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
|
12132 UNBLOCK_INPUT; |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
12133 return; |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
12134 } |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
12135 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12136 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
|
12137 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
|
12138 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
|
12139 UNBLOCK_INPUT; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12140 |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12141 if (!result) |
7602
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
12142 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
|
12143 |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12144 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
|
12145 f->async_visible = 0; |
ab63a77c3a23
(x_iconify_frame): Clear visible when we set iconified.
Richard M. Stallman <rms@gnu.org>
parents:
16491
diff
changeset
|
12146 |
5740
48da4ed089e9
(x_iconify_frame): Fix misbalanced BLOCK_INPUT/UNBLOCK_INPUT.
Karl Heuer <kwzh@gnu.org>
parents:
5737
diff
changeset
|
12147 |
48da4ed089e9
(x_iconify_frame): Fix misbalanced BLOCK_INPUT/UNBLOCK_INPUT.
Karl Heuer <kwzh@gnu.org>
parents:
5737
diff
changeset
|
12148 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
|
12149 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
|
12150 UNBLOCK_INPUT; |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12151 #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
|
12152 |
7738
a810335742bb
(x_iconify_frame): Call x_set_offset,
Richard M. Stallman <rms@gnu.org>
parents:
7706
diff
changeset
|
12153 /* 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
|
12154 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
|
12155 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
|
12156 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
|
12157 |
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
12158 /* 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
|
12159 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
|
12160 |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
12161 /* 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
|
12162 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
|
12163 { |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
12164 XEvent message; |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
12165 |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
12166 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
|
12167 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
|
12168 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
|
12169 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
|
12170 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
|
12171 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12172 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
|
12173 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
|
12174 False, |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
12175 SubstructureRedirectMask | SubstructureNotifyMask, |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
12176 &message)) |
286 | 12177 { |
12178 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
|
12179 error ("Can't notify window manager of iconification"); |
286 | 12180 } |
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
12181 } |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
12182 |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
12183 /* 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
|
12184 IconicState. */ |
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
12185 x_wm_set_window_state (f, IconicState); |
286 | 12186 |
4304
b5014da888a8
(x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents:
4277
diff
changeset
|
12187 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
|
12188 { |
b5014da888a8
(x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents:
4277
diff
changeset
|
12189 /* 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
|
12190 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
|
12191 } |
b5014da888a8
(x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents:
4277
diff
changeset
|
12192 |
1658
452ba03935d7
* xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents:
1530
diff
changeset
|
12193 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
|
12194 f->async_visible = 0; |
286 | 12195 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12196 XFlush (FRAME_X_DISPLAY (f)); |
286 | 12197 UNBLOCK_INPUT; |
5740
48da4ed089e9
(x_iconify_frame): Fix misbalanced BLOCK_INPUT/UNBLOCK_INPUT.
Karl Heuer <kwzh@gnu.org>
parents:
5737
diff
changeset
|
12198 #endif /* not USE_X_TOOLKIT */ |
286 | 12199 } |
12172
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
12200 |
1810
bf618128d973
* xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents:
1803
diff
changeset
|
12201 /* 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
|
12202 |
21514 | 12203 void |
1810
bf618128d973
* xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents:
1803
diff
changeset
|
12204 x_destroy_window (f) |
771 | 12205 struct frame *f; |
286 | 12206 { |
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12207 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
|
12208 |
286 | 12209 BLOCK_INPUT; |
1810
bf618128d973
* xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents:
1803
diff
changeset
|
12210 |
14489
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
12211 /* 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
|
12212 commands to the X server. */ |
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
12213 if (dpyinfo->display != 0) |
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
12214 { |
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
12215 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
|
12216 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
|
12217 #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
|
12218 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
|
12219 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
|
12220 #endif |
14489
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
12221 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
|
12222 #ifdef USE_X_TOOLKIT |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12223 if (f->output_data.x->widget) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12224 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
|
12225 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
|
12226 #endif /* USE_X_TOOLKIT */ |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12227 |
29600
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
12228 unload_color (f, f->output_data.x->foreground_pixel); |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
12229 unload_color (f, f->output_data.x->background_pixel); |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
12230 unload_color (f, f->output_data.x->cursor_pixel); |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
12231 unload_color (f, f->output_data.x->cursor_foreground_pixel); |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
12232 unload_color (f, f->output_data.x->border_pixel); |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
12233 unload_color (f, f->output_data.x->mouse_pixel); |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
12234 if (f->output_data.x->scroll_bar_background_pixel != -1) |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
12235 unload_color (f, f->output_data.x->scroll_bar_background_pixel); |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
12236 if (f->output_data.x->scroll_bar_foreground_pixel != -1) |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
12237 unload_color (f, f->output_data.x->scroll_bar_foreground_pixel); |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
12238 if (f->output_data.x->white_relief.allocated_p) |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
12239 unload_color (f, f->output_data.x->white_relief.pixel); |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
12240 if (f->output_data.x->black_relief.allocated_p) |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
12241 unload_color (f, f->output_data.x->black_relief.pixel); |
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
12242 |
14489
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
12243 free_frame_faces (f); |
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
12244 XFlush (FRAME_X_DISPLAY (f)); |
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
12245 } |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12246 |
17575 | 12247 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
|
12248 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
|
12249 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
12250 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
|
12251 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
|
12252 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
|
12253 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
|
12254 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
|
12255 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
|
12256 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
|
12257 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
|
12258 |
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12259 dpyinfo->reference_count--; |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12260 |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12261 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
|
12262 { |
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12263 dpyinfo->mouse_face_beg_row |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12264 = dpyinfo->mouse_face_beg_col = -1; |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12265 dpyinfo->mouse_face_end_row |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12266 = dpyinfo->mouse_face_end_col = -1; |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12267 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
|
12268 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
|
12269 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
|
12270 } |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
12271 |
1810
bf618128d973
* xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents:
1803
diff
changeset
|
12272 UNBLOCK_INPUT; |
286 | 12273 } |
12274 | |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
12275 /* Setting window manager hints. */ |
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
12276 |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
12277 /* 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
|
12278 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
|
12279 that the window now has. |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
12280 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
|
12281 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
|
12282 |
21514 | 12283 void |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
12284 x_wm_set_size_hint (f, flags, user_position) |
771 | 12285 struct frame *f; |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
12286 long flags; |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
12287 int user_position; |
286 | 12288 { |
12289 XSizeHints size_hints; | |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12290 |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12291 #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
|
12292 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
|
12293 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
|
12294 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
|
12295 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
|
12296 #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
|
12297 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
|
12298 #endif /* not USE_X_TOOLKIT */ |
286 | 12299 |
7187
ca0102511d80
(x_wm_set_size_hint): Don't set PMaxSize.
Richard M. Stallman <rms@gnu.org>
parents:
7169
diff
changeset
|
12300 /* 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
|
12301 size_hints.flags = PResizeInc | PMinSize /* | PMaxSize */; |
286 | 12302 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
12303 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
|
12304 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
|
12305 |
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
|
12306 #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
|
12307 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
|
12308 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
|
12309 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
|
12310 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
|
12311 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
|
12312 #else /* not USE_X_TOOLKIT */ |
771 | 12313 size_hints.height = PIXEL_HEIGHT (f); |
12314 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
|
12315 #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
|
12316 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
12317 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
|
12318 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
|
12319 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
|
12320 = 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
|
12321 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
|
12322 = 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
|
12323 |
12189 | 12324 /* Calculate the base and minimum sizes. |
12325 | |
12326 (When we use the X toolkit, we don't do it here. | |
12327 Instead we copy the values that the widgets are using, below.) */ | |
12328 #ifndef USE_X_TOOLKIT | |
976
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
12329 { |
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
|
12330 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
|
12331 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
|
12332 |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
12333 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
|
12334 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
|
12335 |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
12336 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
|
12337 |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
12338 /* 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
|
12339 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
|
12340 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
|
12341 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
|
12342 zero-row, zero-column frame. |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
12343 |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
12344 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
|
12345 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
|
12346 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
|
12347 |
cd3d59155bf7
* xterm.c (x_wm_set_size_hint): Set the base_width and base_height
Jim Blandy <jimb@redhat.com>
parents:
1077
diff
changeset
|
12348 #ifdef HAVE_X11R4 |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
12349 size_hints.flags |= PBaseSize; |
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
12350 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
|
12351 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
|
12352 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
|
12353 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
|
12354 #else |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
12355 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
|
12356 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
|
12357 #endif |
976
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
12358 } |
286 | 12359 |
12189 | 12360 /* 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
|
12361 if (flags) |
286 | 12362 { |
12189 | 12363 size_hints.flags |= flags; |
12364 goto no_read; | |
12365 } | |
12366 #endif /* not USE_X_TOOLKIT */ | |
12367 | |
12368 { | |
12369 XSizeHints hints; /* Sometimes I hate X Windows... */ | |
12370 long supplied_return; | |
12371 int value; | |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
12372 |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
12373 #ifdef HAVE_X11R4 |
12189 | 12374 value = XGetWMNormalHints (FRAME_X_DISPLAY (f), window, &hints, |
12375 &supplied_return); | |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
12376 #else |
12189 | 12377 value = XGetNormalHints (FRAME_X_DISPLAY (f), window, &hints); |
12378 #endif | |
12379 | |
12380 #ifdef USE_X_TOOLKIT | |
12381 size_hints.base_height = hints.base_height; | |
12382 size_hints.base_width = hints.base_width; | |
12383 size_hints.min_height = hints.min_height; | |
12384 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
|
12385 #endif |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
12386 |
12189 | 12387 if (flags) |
12388 size_hints.flags |= flags; | |
12389 else | |
12390 { | |
12391 if (value == 0) | |
12392 hints.flags = 0; | |
12393 if (hints.flags & PSize) | |
12394 size_hints.flags |= PSize; | |
12395 if (hints.flags & PPosition) | |
12396 size_hints.flags |= PPosition; | |
12397 if (hints.flags & USPosition) | |
12398 size_hints.flags |= USPosition; | |
12399 if (hints.flags & USSize) | |
12400 size_hints.flags |= USSize; | |
12401 } | |
12402 } | |
12403 | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12404 #ifndef USE_X_TOOLKIT |
12189 | 12405 no_read: |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12406 #endif |
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
12407 |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
12408 #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
|
12409 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
|
12410 size_hints.flags |= PWinGravity; |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
12411 |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
12412 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
|
12413 { |
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
12414 size_hints.flags &= ~ PPosition; |
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
12415 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
|
12416 } |
4777
21ed9c9bb210
(w_wn_set_size_hint): Make recent window gravity addition
Brian Fox <bfox@gnu.org>
parents:
4696
diff
changeset
|
12417 #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
|
12418 |
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
|
12419 #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
|
12420 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
|
12421 #else |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12422 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
|
12423 #endif |
286 | 12424 } |
12425 | |
12426 /* Used for IconicState or NormalState */ | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12427 |
21514 | 12428 void |
771 | 12429 x_wm_set_window_state (f, state) |
12430 struct frame *f; | |
286 | 12431 int state; |
12432 { | |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12433 #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
|
12434 Arg al[1]; |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
12435 |
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
12436 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
|
12437 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
|
12438 #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
|
12439 Window window = FRAME_X_WINDOW (f); |
286 | 12440 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
12441 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
|
12442 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
|
12443 |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
12444 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
|
12445 #endif /* not USE_X_TOOLKIT */ |
286 | 12446 } |
12447 | |
21514 | 12448 void |
9542
f8b7a65a94bc
(x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents:
9537
diff
changeset
|
12449 x_wm_set_icon_pixmap (f, pixmap_id) |
771 | 12450 struct frame *f; |
9542
f8b7a65a94bc
(x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents:
9537
diff
changeset
|
12451 int pixmap_id; |
286 | 12452 { |
15117
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
12453 Pixmap icon_pixmap; |
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
12454 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12455 #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
|
12456 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
|
12457 #endif |
286 | 12458 |
9542
f8b7a65a94bc
(x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents:
9537
diff
changeset
|
12459 if (pixmap_id > 0) |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
12460 { |
15117
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
12461 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
|
12462 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
|
12463 } |
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
12464 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
|
12465 { |
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
|
12466 /* 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
|
12467 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
|
12468 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
|
12469 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
|
12470 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
|
12471 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
|
12472 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
|
12473 #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
|
12474 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
|
12475 #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
|
12476 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
|
12477 #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
|
12478 } |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
12479 |
15117
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
12480 #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
|
12481 |
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
12482 { |
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
12483 Arg al[1]; |
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
12484 XtSetArg (al[0], XtNiconPixmap, icon_pixmap); |
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
12485 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
|
12486 } |
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
12487 |
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
12488 #else /* not USE_X_TOOLKIT */ |
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
12489 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
12490 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
|
12491 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
|
12492 |
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
12493 #endif /* not USE_X_TOOLKIT */ |
286 | 12494 } |
12495 | |
21514 | 12496 void |
771 | 12497 x_wm_set_icon_position (f, icon_x, icon_y) |
12498 struct frame *f; | |
286 | 12499 int icon_x, icon_y; |
12500 { | |
7806
ef7a60d59543
(x_wm_set_icon_position, x_wm_set_icon_pixmap):
Richard M. Stallman <rms@gnu.org>
parents:
7801
diff
changeset
|
12501 #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
|
12502 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
|
12503 #else |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
12504 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
|
12505 #endif |
286 | 12506 |
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
12507 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
|
12508 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
|
12509 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
|
12510 |
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
12511 XSetWMHints (FRAME_X_DISPLAY (f), window, &f->output_data.x->wm_hints); |
286 | 12512 } |
12513 | |
12514 | |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12515 /*********************************************************************** |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12516 Fonts |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12517 ***********************************************************************/ |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12518 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12519 /* 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
|
12520 |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12521 struct font_info * |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12522 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
|
12523 FRAME_PTR f; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12524 int font_idx; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12525 { |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12526 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
|
12527 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12528 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12529 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12530 /* 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
|
12531 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
|
12532 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
|
12533 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
|
12534 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
|
12535 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12536 Lisp_Object |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12537 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
|
12538 FRAME_PTR f; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12539 Lisp_Object pattern; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12540 int size; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12541 int maxnames; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12542 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12543 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
|
12544 Lisp_Object tem, second_best; |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12545 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
|
12546 int try_XLoadQueryFont = 0; |
24633
c7d905dca6ba
(x_list_fonts): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents:
24618
diff
changeset
|
12547 int count; |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12548 |
19447
34099ec680df
(x_list_fonts): Adjusted for the name change of
Kenichi Handa <handa@m17n.org>
parents:
19276
diff
changeset
|
12549 patterns = Fassoc (pattern, Valternate_fontname_alist); |
18347
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12550 if (NILP (patterns)) |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12551 patterns = Fcons (pattern, Qnil); |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12552 |
22503
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
12553 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
|
12554 /* 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
|
12555 try_XLoadQueryFont = 1; |
19062
9cc02044117d
(x_list_fonts): Request at least 10 fonts by XListFonts.
Kenichi Handa <handa@m17n.org>
parents:
19060
diff
changeset
|
12556 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12557 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
|
12558 { |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12559 int num_fonts; |
29600
a377acd06ea8
(x_frame_of_widget): New function.
Gerd Moellmann <gerd@gnu.org>
parents:
29536
diff
changeset
|
12560 char **names = NULL; |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12561 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12562 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
|
12563 /* 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
|
12564 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
|
12565 (((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
|
12566 */ |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12567 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
|
12568 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
|
12569 !NILP (list = Fassoc (key, tem)))) |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12570 { |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12571 list = Fcdr_safe (list); |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12572 /* 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
|
12573 goto label_cached; |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12574 } |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12575 |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12576 /* 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
|
12577 |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12578 BLOCK_INPUT; |
24618
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12579 count = x_catch_errors (dpy); |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12580 |
22503
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
12581 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
|
12582 { |
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
12583 XFontStruct *font; |
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
12584 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
|
12585 |
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
12586 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
|
12587 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
|
12588 { |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12589 /* 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
|
12590 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
|
12591 font = NULL; |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12592 x_clear_errors (dpy); |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12593 } |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12594 |
22503
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
12595 if (font |
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
12596 && 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
|
12597 { |
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
12598 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
|
12599 int len = strlen (name); |
22530
6d2e22a16952
(x_list_fonts): Keep alloca usage simple.
Karl Heuer <kwzh@gnu.org>
parents:
22522
diff
changeset
|
12600 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
|
12601 |
23095
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
12602 /* 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
|
12603 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
|
12604 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
|
12605 if (len == 0) |
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
12606 try_XLoadQueryFont = 0; |
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
12607 else |
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
12608 { |
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
12609 num_fonts = 1; |
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
12610 names = (char **) alloca (sizeof (char *)); |
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
12611 /* 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
|
12612 simple var. */ |
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
12613 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
|
12614 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
|
12615 XFree (name); |
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
12616 } |
22503
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
12617 } |
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
12618 else |
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
12619 try_XLoadQueryFont = 0; |
22943
5493321d4526
(x_list_fonts): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
22907
diff
changeset
|
12620 |
5493321d4526
(x_list_fonts): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
22907
diff
changeset
|
12621 if (font) |
5493321d4526
(x_list_fonts): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
22907
diff
changeset
|
12622 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
|
12623 } |
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
12624 |
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
12625 if (!try_XLoadQueryFont) |
24618
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12626 { |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12627 /* 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
|
12628 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
|
12629 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
|
12630 &num_fonts); |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12631 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
|
12632 { |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12633 /* 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
|
12634 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
|
12635 names = NULL; |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12636 x_clear_errors (dpy); |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12637 } |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12638 } |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12639 |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12640 x_uncatch_errors (dpy, count); |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12641 UNBLOCK_INPUT; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12642 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12643 if (names) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12644 { |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12645 int i; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12646 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12647 /* 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
|
12648 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
|
12649 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
|
12650 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12651 int width = 0; |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12652 char *p = names[i]; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12653 int average_width = -1, dashes = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12654 |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12655 /* 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
|
12656 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
|
12657 (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
|
12658 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
|
12659 ignore it. */ |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12660 while (*p) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12661 if (*p++ == '-') |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12662 { |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12663 dashes++; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12664 if (dashes == 7) /* PIXEL_SIZE field */ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12665 width = atoi (p); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12666 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
|
12667 average_width = atoi (p); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12668 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12669 if (dashes < 14 || average_width != 0) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12670 { |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12671 tem = build_string (names[i]); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12672 if (NILP (Fassoc (tem, list))) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12673 { |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12674 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
|
12675 && ((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
|
12676 (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
|
12677 >= 0)) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12678 /* 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
|
12679 width of this font. */ |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12680 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
|
12681 else |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12682 /* 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
|
12683 list = Fcons (Fcons (tem, Qnil), list); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12684 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12685 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12686 } |
22503
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
12687 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
|
12688 XFreeFontNames (names); |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12689 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12690 |
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12691 /* 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
|
12692 if (f != NULL) |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12693 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
|
12694 = Fcons (Fcons (key, list), |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12695 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
|
12696 |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12697 label_cached: |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12698 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
|
12699 |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12700 newlist = second_best = Qnil; |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12701 /* 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
|
12702 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
|
12703 { |
19060
7b362a9bf8e9
(x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents:
19027
diff
changeset
|
12704 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
|
12705 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12706 tem = XCAR (list); |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12707 |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12708 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
|
12709 continue; |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12710 if (!size) |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12711 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12712 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
|
12713 continue; |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12714 } |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12715 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12716 if (!INTEGERP (XCDR (tem))) |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12717 { |
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12718 /* 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
|
12719 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
|
12720 XFontStruct *thisinfo; |
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 BLOCK_INPUT; |
24618
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12723 count = x_catch_errors (dpy); |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12724 thisinfo = XLoadQueryFont (dpy, |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12725 XSTRING (XCAR (tem))->data); |
24618
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12726 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
|
12727 { |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12728 /* 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
|
12729 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
|
12730 thisinfo = NULL; |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12731 x_clear_errors (dpy); |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12732 } |
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
12733 x_uncatch_errors (dpy, count); |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12734 UNBLOCK_INPUT; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12735 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12736 if (thisinfo) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12737 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12738 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
|
12739 = (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
|
12740 ? 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
|
12741 : 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
|
12742 XFreeFont (dpy, thisinfo); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12743 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12744 else |
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12745 /* 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
|
12746 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
|
12747 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
|
12748 XCDR (tem) = make_number (0); |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12749 } |
19060
7b362a9bf8e9
(x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents:
19027
diff
changeset
|
12750 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12751 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
|
12752 if (found_size == size) |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12753 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
|
12754 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
|
12755 { |
19060
7b362a9bf8e9
(x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents:
19027
diff
changeset
|
12756 if (NILP (second_best)) |
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12757 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
|
12758 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
|
12759 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12760 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
|
12761 || 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
|
12762 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
|
12763 } |
7b362a9bf8e9
(x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents:
19027
diff
changeset
|
12764 else |
7b362a9bf8e9
(x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents:
19027
diff
changeset
|
12765 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12766 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
|
12767 && 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
|
12768 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
|
12769 } |
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12770 } |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12771 } |
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12772 if (!NILP (newlist)) |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12773 break; |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12774 else if (!NILP (second_best)) |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12775 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12776 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
|
12777 break; |
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12778 } |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12779 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12780 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12781 return newlist; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12782 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12783 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12784 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12785 #if GLYPH_DEBUG |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12786 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12787 /* 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
|
12788 font table. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12789 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12790 static void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12791 x_check_font (f, font) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12792 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12793 XFontStruct *font; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12794 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12795 int i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12796 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
|
12797 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12798 xassert (font != NULL); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12799 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12800 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
|
12801 if (dpyinfo->font_table[i].name |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12802 && font == dpyinfo->font_table[i].font) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12803 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12804 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12805 xassert (i < dpyinfo->n_fonts); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12806 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12807 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12808 #endif /* GLYPH_DEBUG != 0 */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12809 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12810 /* 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
|
12811 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
|
12812 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
|
12813 "-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
|
12814 have font->min_bounds.width == 0. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12815 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12816 static INLINE void |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12817 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
|
12818 XFontStruct *font; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12819 int *w, *h; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12820 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12821 *h = FONT_HEIGHT (font); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12822 *w = font->min_bounds.width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12823 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12824 /* 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
|
12825 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
|
12826 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
|
12827 if (*w <= 0) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12828 *w = font->max_bounds.width; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12829 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12830 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12831 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12832 /* 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
|
12833 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
|
12834 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
|
12835 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
|
12836 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
|
12837 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12838 static int |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12839 x_compute_min_glyph_bounds (f) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12840 struct frame *f; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12841 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12842 int i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12843 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
|
12844 XFontStruct *font; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12845 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
|
12846 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
|
12847 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12848 dpyinfo->smallest_font_height = 100000; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12849 dpyinfo->smallest_char_width = 100000; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12850 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12851 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
|
12852 if (dpyinfo->font_table[i].name) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12853 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12854 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
|
12855 int w, h; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12856 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12857 font = (XFontStruct *) fontp->font; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12858 xassert (font != (XFontStruct *) ~0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12859 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
|
12860 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12861 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
|
12862 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
|
12863 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12864 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12865 xassert (dpyinfo->smallest_char_width > 0 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12866 && dpyinfo->smallest_font_height > 0); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12867 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12868 return (dpyinfo->n_fonts == 1 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12869 || dpyinfo->smallest_char_width < old_width |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12870 || dpyinfo->smallest_font_height < old_height); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12871 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12872 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12873 |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12874 /* 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
|
12875 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
|
12876 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
|
12877 If loading is failed, return NULL. */ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12878 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12879 struct font_info * |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12880 x_load_font (f, fontname, size) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12881 struct frame *f; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12882 register char *fontname; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12883 int size; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12884 { |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12885 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
|
12886 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
|
12887 int count; |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12888 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12889 /* 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
|
12890 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
|
12891 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
|
12892 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
|
12893 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12894 if (!NILP (font_names)) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12895 { |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12896 Lisp_Object tail; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12897 int i; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12898 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12899 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
|
12900 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
|
12901 if (dpyinfo->font_table[i].name |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12902 && (!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
|
12903 XSTRING (XCAR (tail))->data) |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12904 || !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
|
12905 XSTRING (XCAR (tail))->data))) |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12906 return (dpyinfo->font_table + i); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12907 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12908 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12909 /* 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
|
12910 { |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12911 char *full_name; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12912 XFontStruct *font; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12913 struct font_info *fontp; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12914 unsigned long value; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12915 int i; |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12916 |
18347
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12917 /* 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
|
12918 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
|
12919 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
|
12920 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
|
12921 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
|
12922 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
|
12923 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
|
12924 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12925 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
|
12926 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
|
12927 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
|
12928 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
|
12929 { |
d4ee4399e999
(x_list_fonts): Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24224
diff
changeset
|
12930 /* 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
|
12931 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
|
12932 font = NULL; |
d4ee4399e999
(x_list_fonts): Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24224
diff
changeset
|
12933 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
|
12934 } |
d4ee4399e999
(x_list_fonts): Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24224
diff
changeset
|
12935 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
|
12936 UNBLOCK_INPUT; |
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12937 if (!font) |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12938 return NULL; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12939 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12940 /* 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
|
12941 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
|
12942 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
|
12943 break; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12944 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12945 /* 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
|
12946 if (i == dpyinfo->n_fonts |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12947 && 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
|
12948 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12949 int sz; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12950 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
|
12951 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
|
12952 dpyinfo->font_table |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12953 = (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
|
12954 } |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12955 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12956 fontp = dpyinfo->font_table + i; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12957 if (i == dpyinfo->n_fonts) |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12958 ++dpyinfo->n_fonts; |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12959 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12960 /* 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
|
12961 BLOCK_INPUT; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12962 fontp->font = font; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12963 fontp->font_idx = i; |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12964 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
|
12965 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
|
12966 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12967 /* 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
|
12968 full_name = 0; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12969 if (XGetFontProperty (font, XA_FONT, &value)) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12970 { |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12971 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
|
12972 char *p = name; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12973 int dashes = 0; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12974 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12975 /* 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
|
12976 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
|
12977 so don't use it. |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12978 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
|
12979 stored in them. */ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12980 while (*p) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12981 { |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12982 if (*p == '-') |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12983 dashes++; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12984 p++; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12985 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12986 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12987 if (dashes >= 13) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12988 { |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12989 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
|
12990 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
|
12991 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12992 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12993 XFree (name); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12994 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12995 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12996 if (full_name != 0) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12997 fontp->full_name = full_name; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12998 else |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12999 fontp->full_name = fontp->name; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13000 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13001 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
|
13002 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
|
13003 { |
4001ff593a99
(x_load_font): For the height of font, if normarl ascent and
Kenichi Handa <handa@m17n.org>
parents:
24223
diff
changeset
|
13004 /* 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
|
13005 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
|
13006 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
|
13007 if (max_height > fontp->height) |
24690
585a5e69e371
(x_load_font): Fix typo (`>' -> `=').
Kenichi Handa <handa@m17n.org>
parents:
24633
diff
changeset
|
13008 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
|
13009 } |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13010 |
18347
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
13011 if (NILP (font_names)) |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
13012 { |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
13013 /* 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
|
13014 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
|
13015 the cache for x_list_fonts. */ |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
13016 Lisp_Object lispy_name = build_string (fontname); |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
13017 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
|
13018 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
13019 XCDR (dpyinfo->name_list_element) |
18347
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
13020 = Fcons (Fcons (Fcons (lispy_name, make_number (256)), |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
13021 Fcons (Fcons (lispy_full_name, |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
13022 make_number (fontp->size)), |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
13023 Qnil)), |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
13024 XCDR (dpyinfo->name_list_element)); |
18347
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
13025 if (full_name) |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
13026 XCDR (dpyinfo->name_list_element) |
18347
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
13027 = Fcons (Fcons (Fcons (lispy_full_name, make_number (256)), |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
13028 Fcons (Fcons (lispy_full_name, |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
13029 make_number (fontp->size)), |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
13030 Qnil)), |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
13031 XCDR (dpyinfo->name_list_element)); |
18347
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
13032 } |
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
13033 |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13034 /* 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
|
13035 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
|
13036 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
|
13037 (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
|
13038 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
|
13039 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
|
13040 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
|
13041 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
|
13042 fontp->encoding[1] |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13043 = (font->max_byte1 == 0 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13044 /* 1-byte font */ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13045 ? (font->min_char_or_byte2 < 0x80 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13046 ? (font->max_char_or_byte2 < 0x80 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13047 ? 0 /* 0x20..0x7F */ |
18057
07e0112aa8f5
(x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents:
18008
diff
changeset
|
13048 : 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
|
13049 : 1) /* 0xA0..0xFF */ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13050 /* 2-byte font */ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13051 : (font->min_byte1 < 0x80 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13052 ? (font->max_byte1 < 0x80 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13053 ? (font->min_char_or_byte2 < 0x80 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13054 ? (font->max_char_or_byte2 < 0x80 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13055 ? 0 /* 0x2020..0x7F7F */ |
18057
07e0112aa8f5
(x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents:
18008
diff
changeset
|
13056 : 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
|
13057 : 3) /* 0x20A0..0x7FFF */ |
18057
07e0112aa8f5
(x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents:
18008
diff
changeset
|
13058 : 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
|
13059 : (font->min_char_or_byte2 < 0x80 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13060 ? (font->max_char_or_byte2 < 0x80 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13061 ? 2 /* 0xA020..0xFF7F */ |
18057
07e0112aa8f5
(x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents:
18008
diff
changeset
|
13062 : 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
|
13063 : 1))); /* 0xA0A0..0xFFFF */ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13064 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13065 fontp->baseline_offset |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13066 = (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
|
13067 ? (long) value : 0); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13068 fontp->relative_compose |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13069 = (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
|
13070 ? (long) value : 0); |
17103
7cde34a6424e
(dumpglyphs): Pay attention to characters registered in
Kenichi Handa <handa@m17n.org>
parents:
17050
diff
changeset
|
13071 fontp->default_ascent |
7cde34a6424e
(dumpglyphs): Pay attention to characters registered in
Kenichi Handa <handa@m17n.org>
parents:
17050
diff
changeset
|
13072 = (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
|
13073 ? (long) value : 0); |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13074 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13075 /* 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
|
13076 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
|
13077 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
|
13078 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
|
13079 glyph matrix reallocation necessary. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13080 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
|
13081 UNBLOCK_INPUT; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13082 return fontp; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13083 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13084 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13085 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13086 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13087 /* 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
|
13088 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
|
13089 |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13090 struct font_info * |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13091 x_query_font (f, fontname) |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13092 struct frame *f; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13093 register char *fontname; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13094 { |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13095 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
|
13096 int i; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13097 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13098 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
|
13099 if (dpyinfo->font_table[i].name |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13100 && (!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
|
13101 || !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
|
13102 return (dpyinfo->font_table + i); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13103 return NULL; |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13104 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13105 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13106 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13107 /* 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
|
13108 `encoder' of the structure. */ |
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
13109 |
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
13110 void |
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
13111 x_find_ccl_program (fontp) |
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
13112 struct font_info *fontp; |
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
13113 { |
25068
0d081383b5b8
(x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24991
diff
changeset
|
13114 Lisp_Object list, elt; |
21548
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
13115 |
31694
97c48afc4c5a
(x_draw_image_glyph_string): Remove a comment describing
Gerd Moellmann <gerd@gnu.org>
parents:
31614
diff
changeset
|
13116 elt = Qnil; |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
13117 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
|
13118 { |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
13119 elt = XCAR (list); |
21548
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
13120 if (CONSP (elt) |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
13121 && STRINGP (XCAR (elt)) |
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
13122 && (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
|
13123 >= 0)) |
25068
0d081383b5b8
(x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24991
diff
changeset
|
13124 break; |
0d081383b5b8
(x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24991
diff
changeset
|
13125 } |
31694
97c48afc4c5a
(x_draw_image_glyph_string): Remove a comment describing
Gerd Moellmann <gerd@gnu.org>
parents:
31614
diff
changeset
|
13126 |
25068
0d081383b5b8
(x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24991
diff
changeset
|
13127 if (! NILP (list)) |
0d081383b5b8
(x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24991
diff
changeset
|
13128 { |
25085
23813e3a69b8
(x_find_ccl_program): Add casting.
Kenichi Handa <handa@m17n.org>
parents:
25083
diff
changeset
|
13129 struct ccl_program *ccl |
23813e3a69b8
(x_find_ccl_program): Add casting.
Kenichi Handa <handa@m17n.org>
parents:
25083
diff
changeset
|
13130 = (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
|
13131 |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
13132 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
|
13133 xfree (ccl); |
0d081383b5b8
(x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24991
diff
changeset
|
13134 else |
0d081383b5b8
(x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24991
diff
changeset
|
13135 fontp->font_encoder = ccl; |
21548
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
13136 } |
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
13137 } |
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
13138 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13139 |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13140 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13141 /*********************************************************************** |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13142 Initialization |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13143 ***********************************************************************/ |
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
13144 |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
13145 #ifdef USE_X_TOOLKIT |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
13146 static XrmOptionDescRec emacs_options[] = { |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
13147 {"-geometry", ".geometry", XrmoptionSepArg, NULL}, |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
13148 {"-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
|
13149 |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
13150 {"-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
|
13151 XrmoptionSepArg, NULL}, |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
13152 {"-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
|
13153 |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
13154 {"-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
|
13155 {"-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
|
13156 {"-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
|
13157 {"-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
|
13158 {"-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
|
13159 {"-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
|
13160 {"-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
|
13161 }; |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
13162 #endif /* USE_X_TOOLKIT */ |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
13163 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13164 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
|
13165 |
11015 | 13166 #ifdef MULTI_KBOARD |
13167 /* Test whether two display-name strings agree up to the dot that separates | |
13168 the screen number from the server number. */ | |
13169 static int | |
13170 same_x_server (name1, name2) | |
13171 char *name1, *name2; | |
13172 { | |
13173 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
|
13174 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
|
13175 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
|
13176 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
|
13177 |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
13178 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
|
13179 && 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
|
13180 length_until_period++; |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
13181 |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
13182 /* 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
|
13183 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
|
13184 name1 += 4; |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
13185 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
|
13186 name2 += 4; |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
13187 /* 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
|
13188 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
|
13189 && name1[system_name_length] == ':') |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
13190 name1 += system_name_length; |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
13191 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
|
13192 && name2[system_name_length] == ':') |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
13193 name2 += system_name_length; |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
13194 /* 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
|
13195 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
|
13196 && name1[length_until_period] == ':') |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
13197 name1 += length_until_period; |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
13198 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
|
13199 && name2[length_until_period] == ':') |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
13200 name2 += length_until_period; |
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
13201 |
11015 | 13202 for (; *name1 != '\0' && *name1 == *name2; name1++, name2++) |
13203 { | |
13204 if (*name1 == ':') | |
13205 seen_colon++; | |
13206 if (seen_colon && *name1 == '.') | |
13207 return 1; | |
13208 } | |
13209 return (seen_colon | |
13210 && (*name1 == '.' || *name1 == '\0') | |
13211 && (*name2 == '.' || *name2 == '\0')); | |
13212 } | |
13213 #endif | |
13214 | |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
13215 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
|
13216 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
|
13217 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
|
13218 char *xrm_option; |
10e818a0248a
(x_term_init): New args xrm_option and resource_string.
Richard M. Stallman <rms@gnu.org>
parents:
7738
diff
changeset
|
13219 char *resource_name; |
286 | 13220 { |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
13221 int connection; |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13222 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
|
13223 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
|
13224 XrmDatabase xrdb; |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
13225 |
11997
50c7c05fc301
(x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents:
11994
diff
changeset
|
13226 BLOCK_INPUT; |
50c7c05fc301
(x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents:
11994
diff
changeset
|
13227 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13228 if (!x_initialized) |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13229 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13230 x_initialize (); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13231 x_initialized = 1; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13232 } |
286 | 13233 |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
13234 #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
|
13235 /* 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
|
13236 errors with X11R5: |
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
13237 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
|
13238 on protocol request 18skiloaf. |
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
13239 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
|
13240 #ifdef HAVE_X11XTR6 |
9446
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
13241 XtSetLanguageProc (NULL, NULL, NULL); |
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
13242 #endif |
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
13243 |
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13244 { |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13245 int argc = 0; |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13246 char *argv[3]; |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13247 |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13248 argv[0] = ""; |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13249 argc = 1; |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13250 if (xrm_option) |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13251 { |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13252 argv[argc++] = "-xrm"; |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13253 argv[argc++] = xrm_option; |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13254 } |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13255 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
|
13256 resource_name, EMACS_CLASS, |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13257 emacs_options, XtNumber (emacs_options), |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13258 &argc, argv); |
12530
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
13259 |
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
13260 #ifdef HAVE_X11XTR6 |
14963
6ac4f300f9b4
Include locale.h if HAVE_SETLOCALE.
Richard M. Stallman <rms@gnu.org>
parents:
14946
diff
changeset
|
13261 /* 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
|
13262 fixup_locale (); |
12530
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
13263 #endif |
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13264 } |
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
13265 |
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
13266 #else /* not USE_X_TOOLKIT */ |
9446
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
13267 #ifdef HAVE_X11R5 |
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
13268 XSetLocaleModifiers (""); |
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
13269 #endif |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13270 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
|
13271 #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
|
13272 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13273 /* Detect failure. */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13274 if (dpy == 0) |
11997
50c7c05fc301
(x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents:
11994
diff
changeset
|
13275 { |
50c7c05fc301
(x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents:
11994
diff
changeset
|
13276 UNBLOCK_INPUT; |
50c7c05fc301
(x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents:
11994
diff
changeset
|
13277 return 0; |
50c7c05fc301
(x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents:
11994
diff
changeset
|
13278 } |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13279 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13280 /* 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
|
13281 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13282 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
|
13283 |
11015 | 13284 #ifdef MULTI_KBOARD |
13285 { | |
13286 struct x_display_info *share; | |
13287 Lisp_Object tail; | |
13288 | |
13289 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
|
13290 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
|
13291 if (same_x_server (XSTRING (XCAR (XCAR (tail)))->data, |
11015 | 13292 XSTRING (display_name)->data)) |
13293 break; | |
13294 if (share) | |
13295 dpyinfo->kboard = share->kboard; | |
13296 else | |
13297 { | |
13298 dpyinfo->kboard = (KBOARD *) xmalloc (sizeof (KBOARD)); | |
13299 init_kboard (dpyinfo->kboard); | |
11807
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
13300 if (!EQ (XSYMBOL (Qvendor_specific_keysyms)->function, Qunbound)) |
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
13301 { |
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
13302 char *vendor = ServerVendor (dpy); |
28307
1d4a11a5f39d
(x_term_init): Unblock input around call1.
Gerd Moellmann <gerd@gnu.org>
parents:
28281
diff
changeset
|
13303 UNBLOCK_INPUT; |
11807
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
13304 dpyinfo->kboard->Vsystem_key_alist |
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
13305 = call1 (Qvendor_specific_keysyms, |
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
13306 build_string (vendor ? vendor : "")); |
28307
1d4a11a5f39d
(x_term_init): Unblock input around call1.
Gerd Moellmann <gerd@gnu.org>
parents:
28281
diff
changeset
|
13307 BLOCK_INPUT; |
11807
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
13308 } |
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
13309 |
11015 | 13310 dpyinfo->kboard->next_kboard = all_kboards; |
13311 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
|
13312 /* 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
|
13313 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
|
13314 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
|
13315 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
|
13316 current_kboard = dpyinfo->kboard; |
11015 | 13317 } |
13318 dpyinfo->kboard->reference_count++; | |
13319 } | |
10652
f6a41cb94a75
[MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents:
10634
diff
changeset
|
13320 #endif |
f6a41cb94a75
[MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents:
10634
diff
changeset
|
13321 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13322 /* 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
|
13323 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
|
13324 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
|
13325 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13326 /* 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
|
13327 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
|
13328 x_display_name_list); |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
13329 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
|
13330 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13331 dpyinfo->display = dpy; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13332 |
286 | 13333 #if 0 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13334 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
|
13335 #endif /* ! 0 */ |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13336 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13337 dpyinfo->x_id_name |
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21017
diff
changeset
|
13338 = (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
|
13339 + 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
|
13340 + 2); |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13341 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
|
13342 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
|
13343 |
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
13344 /* 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
|
13345 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
|
13346 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
13347 /* 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
|
13348 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
|
13349 = 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
|
13350 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
13351 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
|
13352 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
|
13353 #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
|
13354 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
|
13355 #else |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
13356 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
|
13357 #endif |
11162
95b70c82ec51
(x_term_init): Initialize cut_buffers_initialized.
Karl Heuer <kwzh@gnu.org>
parents:
11122
diff
changeset
|
13358 /* 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
|
13359 all versions. */ |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13360 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
|
13361 |
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
13362 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
|
13363 DefaultScreen (dpyinfo->display)); |
27991
cf10555b8ce0
(x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents:
27985
diff
changeset
|
13364 select_visual (dpyinfo); |
27985
4ba445af210b
(x_term_init): Set Colormap member of x_display_info
Gerd Moellmann <gerd@gnu.org>
parents:
27974
diff
changeset
|
13365 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
|
13366 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
|
13367 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
|
13368 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
|
13369 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
|
13370 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
|
13371 dpyinfo->icon_bitmap_id = -1; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13372 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
|
13373 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
|
13374 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
|
13375 dpyinfo->bitmaps = 0; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13376 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
|
13377 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
|
13378 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
|
13379 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
|
13380 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
|
13381 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
|
13382 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
|
13383 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
|
13384 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
|
13385 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
|
13386 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
|
13387 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
|
13388 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
|
13389 dpyinfo->x_highlight_frame = 0; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13390 dpyinfo->image_cache = make_image_cache (); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13391 |
27985
4ba445af210b
(x_term_init): Set Colormap member of x_display_info
Gerd Moellmann <gerd@gnu.org>
parents:
27974
diff
changeset
|
13392 /* 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
|
13393 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
|
13394 { |
cf10555b8ce0
(x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents:
27985
diff
changeset
|
13395 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
|
13396 { |
cf10555b8ce0
(x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents:
27985
diff
changeset
|
13397 Lisp_Object value; |
cf10555b8ce0
(x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents:
27985
diff
changeset
|
13398 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
|
13399 build_string ("privateColormap"), |
cf10555b8ce0
(x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents:
27985
diff
changeset
|
13400 build_string ("PrivateColormap"), |
cf10555b8ce0
(x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents:
27985
diff
changeset
|
13401 Qnil, Qnil); |
cf10555b8ce0
(x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents:
27985
diff
changeset
|
13402 if (STRINGP (value) |
cf10555b8ce0
(x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents:
27985
diff
changeset
|
13403 && (!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
|
13404 || !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
|
13405 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
|
13406 } |
cf10555b8ce0
(x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents:
27985
diff
changeset
|
13407 } |
cf10555b8ce0
(x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents:
27985
diff
changeset
|
13408 else |
cf10555b8ce0
(x_term_init): Create a colormap if not using the
Gerd Moellmann <gerd@gnu.org>
parents:
27985
diff
changeset
|
13409 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
|
13410 dpyinfo->visual, AllocNone); |
27985
4ba445af210b
(x_term_init): Set Colormap member of x_display_info
Gerd Moellmann <gerd@gnu.org>
parents:
27974
diff
changeset
|
13411 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13412 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13413 int screen_number = XScreenNumberOfScreen (dpyinfo->screen); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13414 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
|
13415 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
|
13416 dpyinfo->resy = pixels * 25.4 / mm; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13417 pixels = DisplayWidth (dpyinfo->display, screen_number); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13418 mm = DisplayWidthMM (dpyinfo->display, screen_number); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13419 dpyinfo->resx = pixels * 25.4 / mm; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13420 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13421 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
13422 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
|
13423 = 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
|
13424 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
|
13425 = 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
|
13426 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
|
13427 = 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
|
13428 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
|
13429 = 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
|
13430 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
|
13431 = 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
|
13432 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
|
13433 = 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
|
13434 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
|
13435 = 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
|
13436 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
|
13437 = 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
|
13438 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
|
13439 = 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
|
13440 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
|
13441 = 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
|
13442 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
|
13443 = XInternAtom (dpyinfo->display, "TEXT", False); |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13444 dpyinfo->Xatom_COMPOUND_TEXT |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13445 = 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
|
13446 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
|
13447 = 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
|
13448 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
|
13449 = 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
|
13450 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
|
13451 = 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
|
13452 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
|
13453 = 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
|
13454 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
|
13455 = 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
|
13456 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
|
13457 = 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
|
13458 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
|
13459 = 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
|
13460 /* For properties of font. */ |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13461 dpyinfo->Xatom_PIXEL_SIZE |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13462 = XInternAtom (dpyinfo->display, "PIXEL_SIZE", False); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13463 dpyinfo->Xatom_MULE_BASELINE_OFFSET |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13464 = 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
|
13465 dpyinfo->Xatom_MULE_RELATIVE_COMPOSE |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13466 = 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
|
13467 dpyinfo->Xatom_MULE_DEFAULT_ASCENT |
7cde34a6424e
(dumpglyphs): Pay attention to characters registered in
Kenichi Handa <handa@m17n.org>
parents:
17050
diff
changeset
|
13468 = 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
|
13469 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13470 /* Ghostscript support. */ |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13471 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
|
13472 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
|
13473 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13474 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
|
13475 False); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13476 |
11162
95b70c82ec51
(x_term_init): Initialize cut_buffers_initialized.
Karl Heuer <kwzh@gnu.org>
parents:
11122
diff
changeset
|
13477 dpyinfo->cut_buffers_initialized = 0; |
95b70c82ec51
(x_term_init): Initialize cut_buffers_initialized.
Karl Heuer <kwzh@gnu.org>
parents:
11122
diff
changeset
|
13478 |
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
13479 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
|
13480 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
|
13481 |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13482 { |
18705
c4f2eab8e736
(x_term_init): Don't use initializer for null_bits.
Richard M. Stallman <rms@gnu.org>
parents:
18646
diff
changeset
|
13483 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
|
13484 |
c4f2eab8e736
(x_term_init): Don't use initializer for null_bits.
Richard M. Stallman <rms@gnu.org>
parents:
18646
diff
changeset
|
13485 null_bits[0] = 0x00; |
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13486 |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13487 dpyinfo->null_pixel |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13488 = XCreatePixmapFromBitmapData (dpyinfo->display, dpyinfo->root_window, |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13489 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
|
13490 1); |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13491 } |
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
13492 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13493 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13494 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
|
13495 extern unsigned char *gray_bitmap_bits; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13496 dpyinfo->gray |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13497 = XCreatePixmapFromBitmapData (dpyinfo->display, dpyinfo->root_window, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13498 gray_bitmap_bits, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13499 gray_bitmap_width, gray_bitmap_height, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13500 (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
|
13501 } |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13502 |
27500
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
13503 #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
|
13504 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
|
13505 #endif |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
13506 |
9572 | 13507 #ifdef subprocesses |
13508 /* 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
|
13509 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
|
13510 add_keyboard_wait_descriptor (connection); |
9572 | 13511 #endif |
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
13512 |
4147
c6657758fb6f
* xterm.c (x_term_init): Adjust message printed when we can't
Jim Blandy <jimb@redhat.com>
parents:
3951
diff
changeset
|
13513 #ifndef F_SETOWN_BUG |
286 | 13514 #ifdef F_SETOWN |
13515 #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
|
13516 /* 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
|
13517 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
|
13518 #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
|
13519 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
|
13520 #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
|
13521 #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
|
13522 #endif /* F_SETOWN_BUG */ |
286 | 13523 |
13524 #ifdef SIGIO | |
11994
b4dd8ca308dd
(x_term_init): Call init_sigio only if interrupt_input.
Karl Heuer <kwzh@gnu.org>
parents:
11988
diff
changeset
|
13525 if (interrupt_input) |
b4dd8ca308dd
(x_term_init): Call init_sigio only if interrupt_input.
Karl Heuer <kwzh@gnu.org>
parents:
11988
diff
changeset
|
13526 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
|
13527 #endif /* ! defined (SIGIO) */ |
286 | 13528 |
15904
a31cfab57f69
(x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents:
15808
diff
changeset
|
13529 #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
|
13530 #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
|
13531 /* 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
|
13532 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
|
13533 { |
a31cfab57f69
(x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents:
15808
diff
changeset
|
13534 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
|
13535 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
|
13536 Font font; |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
13537 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
|
13538 |
a31cfab57f69
(x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents:
15808
diff
changeset
|
13539 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
|
13540 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
|
13541 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
|
13542 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
|
13543 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
|
13544 to.addr = (XPointer)&font; |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
13545 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
|
13546 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
|
13547 abort (); |
a31cfab57f69
(x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents:
15808
diff
changeset
|
13548 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
|
13549 XrmPutLineResource (&xrdb, "Emacs.dialog.*.font: 9x15"); |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
13550 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
|
13551 } |
a31cfab57f69
(x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents:
15808
diff
changeset
|
13552 #endif |
19021
6f150e46a5fd
(x_term_init) [! HAVE_X11R5]: Don't try to use XtCvtStringToFont.
Richard M. Stallman <rms@gnu.org>
parents:
18996
diff
changeset
|
13553 #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
|
13554 |
28139 | 13555 /* See if we should run in synchronous mode. This is useful |
13556 for debugging X code. */ | |
13557 { | |
13558 Lisp_Object value; | |
13559 value = display_x_get_resource (dpyinfo, | |
13560 build_string ("synchronous"), | |
13561 build_string ("Synchronous"), | |
13562 Qnil, Qnil); | |
13563 if (STRINGP (value) | |
13564 && (!strcmp (XSTRING (value)->data, "true") | |
13565 || !strcmp (XSTRING (value)->data, "on"))) | |
13566 XSynchronize (dpyinfo->display, True); | |
13567 } | |
13568 | |
11997
50c7c05fc301
(x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents:
11994
diff
changeset
|
13569 UNBLOCK_INPUT; |
50c7c05fc301
(x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents:
11994
diff
changeset
|
13570 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13571 return dpyinfo; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13572 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13573 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13574 /* 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
|
13575 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
|
13576 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13577 void |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13578 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
|
13579 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
|
13580 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13581 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
|
13582 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13583 /* 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
|
13584 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
|
13585 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
|
13586 && 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
|
13587 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
|
13588 else |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13589 { |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13590 Lisp_Object tail; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13591 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13592 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
|
13593 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
|
13594 { |
27428
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
13595 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
|
13596 { |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
13597 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
|
13598 break; |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13599 } |
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
13600 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
|
13601 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13602 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13603 |
27524
67501e6e8b34
(x_delete_display): Update next_noop_dpyinfo to ensure
Gerd Moellmann <gerd@gnu.org>
parents:
27500
diff
changeset
|
13604 if (next_noop_dpyinfo == dpyinfo) |
67501e6e8b34
(x_delete_display): Update next_noop_dpyinfo to ensure
Gerd Moellmann <gerd@gnu.org>
parents:
27500
diff
changeset
|
13605 next_noop_dpyinfo = dpyinfo->next; |
67501e6e8b34
(x_delete_display): Update next_noop_dpyinfo to ensure
Gerd Moellmann <gerd@gnu.org>
parents:
27500
diff
changeset
|
13606 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13607 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
|
13608 x_display_list = dpyinfo->next; |
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13609 else |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13610 { |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13611 struct x_display_info *tail; |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13612 |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13613 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
|
13614 if (tail->next == dpyinfo) |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13615 tail->next = tail->next->next; |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13616 } |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13617 |
12771
6f07c79d9a05
(x_delete_display) [AIX]: Don't call XRmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
12750
diff
changeset
|
13618 #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
|
13619 #ifndef AIX /* On AIX, XCloseDisplay calls this. */ |
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13620 XrmDestroyDatabase (dpyinfo->xrdb); |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13621 #endif |
12771
6f07c79d9a05
(x_delete_display) [AIX]: Don't call XRmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
12750
diff
changeset
|
13622 #endif |
11015 | 13623 #ifdef MULTI_KBOARD |
13624 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
|
13625 delete_kboard (dpyinfo->kboard); |
10652
f6a41cb94a75
[MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents:
10634
diff
changeset
|
13626 #endif |
27500
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
13627 #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
|
13628 if (dpyinfo->xim) |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
13629 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
|
13630 #endif |
d33b4becc3ca
(x_display_cursor): Set XIC pre-edit area only if window
Gerd Moellmann <gerd@gnu.org>
parents:
27428
diff
changeset
|
13631 |
10652
f6a41cb94a75
[MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents:
10634
diff
changeset
|
13632 xfree (dpyinfo->font_table); |
f6a41cb94a75
[MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents:
10634
diff
changeset
|
13633 xfree (dpyinfo->x_id_name); |
f6a41cb94a75
[MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents:
10634
diff
changeset
|
13634 xfree (dpyinfo); |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13635 } |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13636 |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13637 /* 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
|
13638 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13639 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
|
13640 { |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13641 x_produce_glyphs, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13642 x_write_glyphs, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13643 x_insert_glyphs, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13644 x_clear_end_of_line, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13645 x_scroll_run, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13646 x_after_update_window_line, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13647 x_update_window_begin, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13648 x_update_window_end, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13649 XTcursor_to, |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13650 x_flush, |
30160
432da5a9f734
(x_update_window_end): Add parameter
Gerd Moellmann <gerd@gnu.org>
parents:
30153
diff
changeset
|
13651 x_clear_mouse_face, |
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
13652 x_get_glyph_overhangs, |
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
13653 x_fix_overlapping_area |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13654 }; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13655 |
21514 | 13656 void |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13657 x_initialize () |
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13658 { |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13659 rif = &x_redisplay_interface; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13660 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13661 clear_frame_hook = x_clear_frame; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13662 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
|
13663 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
|
13664 delete_glyphs_hook = x_delete_glyphs; |
286 | 13665 ring_bell_hook = XTring_bell; |
13666 reset_terminal_modes_hook = XTreset_terminal_modes; | |
13667 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
|
13668 update_begin_hook = x_update_begin; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13669 update_end_hook = x_update_end; |
286 | 13670 set_terminal_window_hook = XTset_terminal_window; |
13671 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
|
13672 frame_up_to_date_hook = XTframe_up_to_date; |
286 | 13673 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
|
13674 mouse_position_hook = XTmouse_position; |
771 | 13675 frame_rehighlight_hook = XTframe_rehighlight; |
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
13676 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
|
13677 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
|
13678 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
|
13679 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
|
13680 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
|
13681 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
|
13682 |
771 | 13683 scroll_region_ok = 1; /* we'll scroll partial frames */ |
286 | 13684 char_ins_del_ok = 0; /* just as fast to write the line */ |
13685 line_ins_del_ok = 1; /* we'll just blt 'em */ | |
13686 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
|
13687 memory_below_frame = 0; /* we don't remember what scrolls |
286 | 13688 off the bottom */ |
13689 baud_rate = 19200; | |
13690 | |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13691 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
|
13692 last_tool_bar_item = -1; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13693 any_help_event_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13694 |
4476
e7de1b007447
(x_term_init): Set the hooks before we call Fset_input_mode.
Richard M. Stallman <rms@gnu.org>
parents:
4304
diff
changeset
|
13695 /* 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
|
13696 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
|
13697 |
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13698 #ifdef USE_X_TOOLKIT |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13699 XtToolkitInitialize (); |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13700 Xt_app_con = XtCreateApplicationContext (); |
12494
bfbe2490dbf0
(x_initialize) [USE_X_TOOLKIT]: Set fallback resources.
Richard M. Stallman <rms@gnu.org>
parents:
12431
diff
changeset
|
13701 XtAppSetFallbackResources (Xt_app_con, Xt_default_resources); |
27428
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
13702 |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
13703 /* Install an asynchronous timer that processes Xt timeout events |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
13704 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
|
13705 timeouts internally, for example the LessTif menu bar, or the |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
13706 Xaw3d scroll bar. When Xt timouts aren't processed, these |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
13707 widgets don't behave normally. */ |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
13708 { |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
13709 EMACS_TIME interval; |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
13710 EMACS_SET_SECS_USECS (interval, 0, 100000); |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
13711 start_atimer (ATIMER_CONTINUOUS, interval, x_process_timeouts, 0); |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
13712 } |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
13713 #endif |
c8b20597f0fd
(toplevel): Include atimer.h.
Gerd Moellmann <gerd@gnu.org>
parents:
27040
diff
changeset
|
13714 |
26800
e828d4307ab9
(x_initialize): only setup xaw3d_* if they've been declared.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26789
diff
changeset
|
13715 #if USE_TOOLKIT_SCROLL_BARS |
26789
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
13716 xaw3d_arrow_scroll = False; |
03a6016a38bf
(#includes): Allow compilation with only Xaw.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
26633
diff
changeset
|
13717 xaw3d_pick_top = True; |
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13718 #endif |
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
13719 |
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
13720 /* 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
|
13721 original error handler. */ |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
13722 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
|
13723 XSetIOErrorHandler (x_io_error_quitter); |
286 | 13724 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13725 /* Disable Window Change signals; they are handled by X events. */ |
286 | 13726 #ifdef SIGWINCH |
13727 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
|
13728 #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
|
13729 |
10743
6977bff3ff38
(x_display_bar_cursor): Use frame's cursor_width.
Richard M. Stallman <rms@gnu.org>
parents:
10652
diff
changeset
|
13730 signal (SIGPIPE, x_connection_signal); |
286 | 13731 } |
395 | 13732 |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13733 |
395 | 13734 void |
13735 syms_of_xterm () | |
13736 { | |
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
13737 staticpro (&x_error_message_string); |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
13738 x_error_message_string = Qnil; |
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
13739 |
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
13740 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
|
13741 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
|
13742 |
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
13743 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
|
13744 last_mouse_scroll_bar = Qnil; |
11807
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
13745 |
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
13746 staticpro (&Qvendor_specific_keysyms); |
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
13747 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
|
13748 |
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
13749 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
|
13750 last_mouse_press_frame = Qnil; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13751 |
30214
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
13752 help_echo = Qnil; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13753 staticpro (&help_echo); |
30214
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
13754 help_echo_object = Qnil; |
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
13755 staticpro (&help_echo_object); |
30302
9a5ccf8784f3
(help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
30214
diff
changeset
|
13756 help_echo_window = Qnil; |
9a5ccf8784f3
(help_echo_window): New variable.
Gerd Moellmann <gerd@gnu.org>
parents:
30214
diff
changeset
|
13757 staticpro (&help_echo_window); |
30214
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
13758 previous_help_echo = Qnil; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13759 staticpro (&previous_help_echo); |
30214
793f5a4e610b
(help_echo_object, help_echo_pos): New variables.
Gerd Moellmann <gerd@gnu.org>
parents:
30197
diff
changeset
|
13760 help_echo_pos = -1; |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13761 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13762 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
|
13763 "*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
|
13764 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
|
13765 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
|
13766 x_stretch_cursor_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13767 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13768 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
|
13769 "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
|
13770 #if USE_TOOLKIT_SCROLL_BARS |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13771 x_toolkit_scroll_bars_p = 1; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13772 #else |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13773 x_toolkit_scroll_bars_p = 0; |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13774 #endif |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13775 |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13776 staticpro (&last_mouse_motion_frame); |
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13777 last_mouse_motion_frame = Qnil; |
395 | 13778 } |
14694
41de9b2640a1
(X_CONNECTION_LOCK_FLAG): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
14692
diff
changeset
|
13779 |
41de9b2640a1
(X_CONNECTION_LOCK_FLAG): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
14692
diff
changeset
|
13780 #endif /* not HAVE_X_WINDOWS */ |
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
13781 |