Mercurial > emacs
annotate src/xterm.c @ 26576:0894b3c8dfd6
(sql-find-sqli-buffer): New function.
(sql-set-sqli-buffer-generally): New function.
(sql-set-sqli-buffer): Better checking of new-buffer.
(sql-copy-column): Add comma after INTO clause, too.
(sql-imenu-generic-expression): New, used to set
imenu-generic-expression.
(sql-mode): Use ?_ and ?. instead of 95 and 46 when
setting font-lock-defaults' SYNTAX-ALIST. Set
imenu-generic-expression, imenu-case-fold-search, and
imenu-syntax-alist.
(sql-interactive-mode): Use ?_ and ?. instead of 95
and 46 when setting font-lock-defaults' SYNTAX-ALIST.
| author | Gerd Moellmann <gerd@gnu.org> |
|---|---|
| date | Wed, 24 Nov 1999 14:57:04 +0000 |
| parents | b7aa6ac26872 |
| children | 346fcfbf7123 |
| rev | line source |
|---|---|
| 286 | 1 /* X Communication module for terminals which understand the X protocol. |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2 Copyright (C) 1989, 93, 94, 95, 96, 1997, 1998, 1999 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3 Free Software Foundation, Inc. |
| 286 | 4 |
| 5 This file is part of GNU Emacs. | |
| 6 | |
| 7 GNU Emacs is free software; you can redistribute it and/or modify | |
| 8 it under the terms of the GNU General Public License as published by | |
| 621 | 9 the Free Software Foundation; either version 2, or (at your option) |
| 286 | 10 any later version. |
| 11 | |
| 12 GNU Emacs is distributed in the hope that it will be useful, | |
| 13 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 15 GNU General Public License for more details. | |
| 16 | |
| 17 You should have received a copy of the GNU General Public License | |
| 18 along with GNU Emacs; see the file COPYING. If not, write to | |
|
14186
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
14165
diff
changeset
|
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
|
ee40177f6c68
Update FSF's address in the preamble.
Erik Naggum <erik@naggum.no>
parents:
14165
diff
changeset
|
20 Boston, MA 02111-1307, USA. */ |
| 286 | 21 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
22 /* New display code by Gerd Moellmann <gerd@gnu.org>. */ |
|
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
23 /* Xt features made by Fred Pierresteguy. */ |
|
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
24 |
|
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25921
diff
changeset
|
25 #include <config.h> |
|
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25921
diff
changeset
|
26 |
|
2977
ddcad1457cd5
Move signal.h and stdio.h before config.h.
Richard M. Stallman <rms@gnu.org>
parents:
2958
diff
changeset
|
27 /* On 4.3 these lose if they come after xterm.h. */ |
|
ddcad1457cd5
Move signal.h and stdio.h before config.h.
Richard M. Stallman <rms@gnu.org>
parents:
2958
diff
changeset
|
28 /* Putting these at the beginning seems to be standard for other .c files. */ |
|
ddcad1457cd5
Move signal.h and stdio.h before config.h.
Richard M. Stallman <rms@gnu.org>
parents:
2958
diff
changeset
|
29 #include <signal.h> |
|
ddcad1457cd5
Move signal.h and stdio.h before config.h.
Richard M. Stallman <rms@gnu.org>
parents:
2958
diff
changeset
|
30 |
|
7902
22b9aaaf0302
Put stdio.h after config.h.
Richard M. Stallman <rms@gnu.org>
parents:
7870
diff
changeset
|
31 #include <stdio.h> |
|
22b9aaaf0302
Put stdio.h after config.h.
Richard M. Stallman <rms@gnu.org>
parents:
7870
diff
changeset
|
32 |
| 286 | 33 #ifdef HAVE_X_WINDOWS |
| 34 | |
| 35 #include "lisp.h" | |
|
2439
b6c62e4abf59
Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents:
2353
diff
changeset
|
36 #include "blockinput.h" |
| 286 | 37 |
|
21933
58f3be08e692
Include syssignal.h after lisp.h.
Andreas Schwab <schwab@suse.de>
parents:
21903
diff
changeset
|
38 /* Need syssignal.h for various externs and definitions that may be required |
|
58f3be08e692
Include syssignal.h after lisp.h.
Andreas Schwab <schwab@suse.de>
parents:
21903
diff
changeset
|
39 by some configurations for calls to signal later in this source file. */ |
|
58f3be08e692
Include syssignal.h after lisp.h.
Andreas Schwab <schwab@suse.de>
parents:
21903
diff
changeset
|
40 #include "syssignal.h" |
|
58f3be08e692
Include syssignal.h after lisp.h.
Andreas Schwab <schwab@suse.de>
parents:
21903
diff
changeset
|
41 |
| 286 | 42 /* This may include sys/types.h, and that somehow loses |
| 43 if this is not done before the other system files. */ | |
| 44 #include "xterm.h" | |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
45 #include <X11/cursorfont.h> |
| 286 | 46 |
|
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
47 #ifndef USG |
| 286 | 48 /* Load sys/types.h if not already loaded. |
| 49 In some systems loading it twice is suicidal. */ | |
| 50 #ifndef makedev | |
| 51 #include <sys/types.h> | |
|
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
52 #endif /* makedev */ |
|
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
53 #endif /* USG */ |
| 286 | 54 |
|
16220
02044b05d8e0
Replaced symbol BSD with BSD_SYSTEM.
Karl Heuer <kwzh@gnu.org>
parents:
16209
diff
changeset
|
55 #ifdef BSD_SYSTEM |
| 286 | 56 #include <sys/ioctl.h> |
|
16220
02044b05d8e0
Replaced symbol BSD with BSD_SYSTEM.
Karl Heuer <kwzh@gnu.org>
parents:
16209
diff
changeset
|
57 #endif /* ! defined (BSD_SYSTEM) */ |
| 286 | 58 |
|
3355
e0c2e8a2ef75
(XTread_socket, case KeyPress) [HPUX]: Test IsModifiedKey.
Richard M. Stallman <rms@gnu.org>
parents:
3284
diff
changeset
|
59 #include "systty.h" |
| 555 | 60 #include "systime.h" |
| 286 | 61 |
|
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
62 #ifndef INCLUDED_FCNTL |
| 286 | 63 #include <fcntl.h> |
|
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
64 #endif |
| 286 | 65 #include <ctype.h> |
| 66 #include <errno.h> | |
| 67 #include <setjmp.h> | |
| 68 #include <sys/stat.h> | |
| 10366 | 69 /* Caused redefinition of DBL_DIG on Netbsd; seems not to be needed. */ |
| 70 /* #include <sys/param.h> */ | |
| 286 | 71 |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
72 #include "charset.h" |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
73 #include "ccl.h" |
|
23515
1e52542fb338
Include frame.h before fontset.h.
Kenichi Handa <handa@m17n.org>
parents:
23162
diff
changeset
|
74 #include "frame.h" |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
75 #include "fontset.h" |
| 286 | 76 #include "dispextern.h" |
| 77 #include "termhooks.h" | |
| 78 #include "termopts.h" | |
| 79 #include "termchar.h" | |
| 80 #if 0 | |
| 81 #include "sink.h" | |
| 82 #include "sinkmask.h" | |
|
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
83 #endif /* ! 0 */ |
| 286 | 84 #include "gnu.h" |
| 85 #include "disptab.h" | |
| 86 #include "buffer.h" | |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
87 #include "window.h" |
| 8652 | 88 #include "keyboard.h" |
| 8848 | 89 #include "intervals.h" |
| 21514 | 90 #include "process.h" |
| 286 | 91 |
|
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
92 #ifdef USE_X_TOOLKIT |
|
15117
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
93 #include <X11/Shell.h> |
|
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
94 #endif |
|
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
95 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
96 #include <sys/types.h> |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
97 #ifdef HAVE_SYS_TIME_H |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
98 #include <sys/time.h> |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
99 #endif |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
100 #ifdef HAVE_UNISTD_H |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
101 #include <unistd.h> |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
102 #endif |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
103 |
|
15117
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
104 #ifdef USE_X_TOOLKIT |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
105 |
|
5898
105c99071e9b
(x_destroy_window) [USE_X_TOOLKIT]: Call free_frame_menubar.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5872
diff
changeset
|
106 extern void free_frame_menubar (); |
|
13507
9a9f459075af
(HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents:
13363
diff
changeset
|
107 extern FRAME_PTR x_menubar_window_to_frame (); |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
108 |
|
13507
9a9f459075af
(HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents:
13363
diff
changeset
|
109 #if (XtSpecificationRelease >= 5) && !defined(NO_EDITRES) |
|
9a9f459075af
(HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents:
13363
diff
changeset
|
110 #define HACK_EDITRES |
|
6941
a914781ef58a
(Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents:
6934
diff
changeset
|
111 extern void _XEditResCheckMessages (); |
|
13507
9a9f459075af
(HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents:
13363
diff
changeset
|
112 #endif /* not NO_EDITRES */ |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
113 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
114 /* Include toolkit specific headers for the scroll bar widget. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
115 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
116 #ifdef USE_TOOLKIT_SCROLL_BARS |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
117 #if defined USE_MOTIF |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
118 #include <Xm/Xm.h> /* for LESSTIF_VERSION */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
119 #include <Xm/ScrollBar.h> |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
120 #include <Xm/ScrollBarP.h> |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
121 #elif defined HAVE_XAW3D |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
122 #include <X11/Xaw3d/Simple.h> |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
123 #include <X11/Xaw3d/ThreeD.h> |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
124 #include <X11/Xaw3d/Scrollbar.h> |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
125 #define ARROW_SCROLLBAR |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
126 #include <X11/Xaw3d/ScrollbarP.h> |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
127 #endif /* HAVE_XAW3D */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
128 #endif /* USE_TOOLKIT_SCROLL_BARS */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
129 |
|
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
130 #endif /* USE_X_TOOLKIT */ |
|
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
131 |
|
6022
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
132 #ifndef USE_X_TOOLKIT |
|
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
133 #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
|
134 #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
|
135 #endif |
|
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
136 |
|
7602
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
137 #ifdef USE_X_TOOLKIT |
| 12189 | 138 #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
|
139 #ifndef XtNinitialState |
|
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
140 #define XtNinitialState "initialState" |
|
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
141 #endif |
|
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
142 #endif |
|
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
143 |
|
14305
3cc44eaf9ebf
(x_connection_signal): Explicitly check the thread interlock
Karl Heuer <kwzh@gnu.org>
parents:
14186
diff
changeset
|
144 #ifdef SOLARIS2 |
| 15292 | 145 /* memmove will be defined as a macro in Xfuncs.h unless |
| 146 <string.h> is included beforehand. The declaration for memmove in | |
| 147 <string.h> will cause a syntax error when Xfuncs.h later includes it. */ | |
| 148 #include <string.h> | |
| 149 #endif | |
| 150 | |
|
14522
9cee3e7c6468
(min, max): Don't define if already defined.
Richard M. Stallman <rms@gnu.org>
parents:
14489
diff
changeset
|
151 #ifndef min |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
152 #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
|
153 #endif |
|
9cee3e7c6468
(min, max): Don't define if already defined.
Richard M. Stallman <rms@gnu.org>
parents:
14489
diff
changeset
|
154 #ifndef max |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
155 #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
|
156 #endif |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
157 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
158 #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
|
159 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
160 #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
|
161 |
|
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
162 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
163 /* Bitmaps for truncated lines. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
164 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
165 enum bitmap_type |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
166 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
167 NO_BITMAP, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
168 LEFT_TRUNCATION_BITMAP, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
169 RIGHT_TRUNCATION_BITMAP, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
170 OVERLAY_ARROW_BITMAP, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
171 CONTINUED_LINE_BITMAP, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
172 CONTINUATION_LINE_BITMAP, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
173 ZV_LINE_BITMAP |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
174 }; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
175 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
176 /* 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
|
177 `indicate-empty-lines' is non-nil. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
178 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
179 #define zv_width 8 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
180 #define zv_height 8 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
181 static unsigned char zv_bits[] = { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
182 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
|
183 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
184 /* An arrow like this: `<-'. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
185 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
186 #define left_width 8 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
187 #define left_height 8 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
188 static unsigned char left_bits[] = { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
189 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
|
190 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
191 /* Right truncation arrow bitmap `->'. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
192 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
193 #define right_width 8 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
194 #define right_height 8 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
195 static unsigned char right_bits[] = { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
196 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
|
197 |
| 25465 | 198 /* Marker for continued lines. */ |
| 199 | |
| 200 #define continued_width 8 | |
| 201 #define continued_height 8 | |
| 202 static unsigned char continued_bits[] = { | |
| 203 0x3c, 0x7c, 0xc0, 0xe4, 0xfc, 0x7c, 0x3c, 0x7c}; | |
| 204 | |
| 205 /* Marker for continuation lines. */ | |
| 206 | |
| 207 #define continuation_width 8 | |
| 208 #define continuation_height 8 | |
| 209 static unsigned char continuation_bits[] = { | |
| 210 0x3c, 0x3e, 0x03, 0x27, 0x3f, 0x3e, 0x3c, 0x3e}; | |
| 211 | |
| 212 /* Overlay arrow bitmap. */ | |
| 213 | |
| 214 #if 0 | |
| 215 /* A bomb. */ | |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
216 #define ov_width 8 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
217 #define ov_height 8 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
218 static unsigned char ov_bits[] = { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
219 0x30, 0x08, 0x3c, 0x7e, 0x7a, 0x7a, 0x62, 0x3c}; |
| 25465 | 220 #else |
| 221 /* A triangular arrow. */ | |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
222 #define ov_width 8 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
223 #define ov_height 8 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
224 static unsigned char ov_bits[] = { |
| 25465 | 225 0x03, 0x0f, 0x1f, 0x3f, 0x3f, 0x1f, 0x0f, 0x03}; |
| 226 | |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
227 #endif |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
228 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
229 extern Lisp_Object Qhelp_echo; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
230 |
|
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 /* 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
|
233 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
234 int x_toolkit_scroll_bars_p; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
235 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
236 /* 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
|
237 (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
|
238 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
239 static Lisp_Object help_echo; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
240 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
241 /* Temporary variable for XTread_socket. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
242 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
243 static Lisp_Object previous_help_echo; |
|
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 /* 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
|
246 start. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
247 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
248 static int any_help_event_p; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
249 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
250 /* 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
|
251 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
|
252 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
|
253 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
254 int x_stretch_cursor_p; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
255 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
256 /* 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
|
257 use. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
258 |
|
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
259 struct x_display_info *x_display_list; |
| 286 | 260 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
261 /* 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
|
262 . 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
|
263 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
|
264 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
|
265 |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
266 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
|
267 |
|
2474
86c8a6e08fd4
Fix typo in comment delimiter.
Richard M. Stallman <rms@gnu.org>
parents:
2468
diff
changeset
|
268 /* 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
|
269 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
|
270 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
|
271 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
|
272 |
|
2468
35aa32e1a003
* xterm.c (updating_frame): Declare this extern instead of static,
Jim Blandy <jimb@redhat.com>
parents:
2439
diff
changeset
|
273 extern struct frame *updating_frame; |
| 771 | 274 |
| 21514 | 275 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
|
276 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
277 /* 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
|
278 |
|
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
279 struct frame *pending_autoraise_frame; |
|
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
280 |
|
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
281 #ifdef USE_X_TOOLKIT |
|
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
282 /* The application context for Xt use. */ |
|
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
283 XtAppContext Xt_app_con; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
284 static String Xt_default_resources[] = {0}; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
285 #endif /* USE_X_TOOLKIT */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
286 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
287 /* 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
|
288 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
|
289 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
|
290 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
291 struct cursor_pos output_cursor; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
292 |
| 286 | 293 |
|
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
294 /* Mouse movement. |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
295 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
296 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
|
297 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
|
298 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
|
299 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
|
300 |
|
c99dd01d9334
(note_mouse_movement): Don't call XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
14963
diff
changeset
|
301 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
|
302 |
|
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
303 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
|
304 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
|
305 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
|
306 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
|
307 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
|
308 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
|
309 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
|
310 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
|
311 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
|
312 is off. */ |
|
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
313 |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
314 /* 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
|
315 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
316 FRAME_PTR last_mouse_frame; |
|
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
317 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
|
318 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
|
319 |
|
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
320 /* 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
|
321 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
322 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
|
323 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
|
324 an ordinary motion. |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
325 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
326 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
|
327 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
|
328 event. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
329 |
|
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
330 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
|
331 |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
332 /* 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
|
333 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
|
334 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
|
335 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
|
336 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
|
337 it's somewhat accurate. */ |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
338 |
|
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
339 static Time last_mouse_movement_time; |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
340 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
341 /* 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
|
342 events. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
343 |
|
9337
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
344 #ifdef __STDC__ |
|
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
345 static int volatile input_signal_count; |
|
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
346 #else |
|
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
347 static int input_signal_count; |
|
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
348 #endif |
|
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
349 |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
350 /* Used locally within XTread_socket. */ |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
351 |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
352 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
|
353 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
354 /* 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
|
355 |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
356 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
|
357 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
|
358 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
359 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
|
360 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
361 /* Tells if a window manager is present or not. */ |
| 286 | 362 |
| 363 extern Lisp_Object Vx_no_window_manager; | |
| 364 | |
|
6941
a914781ef58a
(Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents:
6934
diff
changeset
|
365 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
|
366 |
| 286 | 367 extern int errno; |
| 368 | |
|
2661
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
369 /* 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
|
370 |
|
1841
338e4ffdb54b
(XTread_socket): Support extra_keyboard_modifiers.
Richard M. Stallman <rms@gnu.org>
parents:
1821
diff
changeset
|
371 extern int extra_keyboard_modifiers; |
|
338e4ffdb54b
(XTread_socket): Support extra_keyboard_modifiers.
Richard M. Stallman <rms@gnu.org>
parents:
1821
diff
changeset
|
372 |
|
11807
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
373 static Lisp_Object Qvendor_specific_keysyms; |
|
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
374 |
|
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
375 extern XrmDatabase x_load_resources (); |
|
11915
e2ab839155e1
(XTflash): Use pointers as args to select.
Karl Heuer <kwzh@gnu.org>
parents:
11904
diff
changeset
|
376 extern Lisp_Object x_icon_type (); |
|
e2ab839155e1
(XTflash): Use pointers as args to select.
Karl Heuer <kwzh@gnu.org>
parents:
11904
diff
changeset
|
377 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
378 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
379 /* 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
|
380 glyphs in x_draw_glyphs. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
381 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
382 enum draw_glyphs_face |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
383 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
384 DRAW_NORMAL_TEXT, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
385 DRAW_INVERSE_VIDEO, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
386 DRAW_CURSOR, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
387 DRAW_MOUSE_FACE, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
388 DRAW_IMAGE_RAISED, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
389 DRAW_IMAGE_SUNKEN |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
392 static void x_update_window_end P_ ((struct window *, int)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
393 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
|
394 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
|
395 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
|
396 unsigned)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
397 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
|
398 int *, int *)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
399 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
|
400 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
|
401 int *, int *, int *)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
402 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
|
403 static void x_check_font P_ ((struct frame *, XFontStruct *)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
404 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
|
405 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
|
406 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
|
407 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
|
408 enum draw_glyphs_face)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
409 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
|
410 int x_catch_errors P_ ((Display *)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
411 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
|
412 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
|
413 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
|
414 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
|
415 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
|
416 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
|
417 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
|
418 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
|
419 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
|
420 void x_initialize P_ ((void)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
421 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
|
422 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
|
423 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
|
424 struct glyph_row *, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
425 enum draw_glyphs_face)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
426 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
|
427 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
|
428 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
|
429 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
|
430 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
|
431 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
|
432 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
|
433 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
|
434 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
|
435 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
|
436 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
|
437 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
|
438 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
|
439 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
|
440 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
|
441 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
|
442 static void x_draw_hollow_cursor P_ ((struct window *, struct glyph_row *)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
443 static void x_draw_bar_cursor P_ ((struct window *, struct glyph_row *)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
444 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
|
445 XRectangle *)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
446 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
|
447 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
|
448 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
|
449 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
|
450 XRectangle *, enum glyph_row_area)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
451 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
|
452 XRectangle *)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
453 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
|
454 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
|
455 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
|
456 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
|
457 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
|
458 enum bitmap_type)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
459 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
460 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
|
461 GC, int)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
462 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
|
463 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
|
464 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
|
465 static void x_flush P_ ((struct frame *f)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
466 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
467 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
468 /* 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
|
469 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
470 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
471 x_flush (f) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
472 struct frame *f; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
473 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
474 BLOCK_INPUT; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
475 if (f == NULL) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
476 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
477 Lisp_Object rest, frame; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
478 FOR_EACH_FRAME (rest, frame) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
479 x_flush (XFRAME (frame)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
480 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
481 else if (FRAME_X_P (f)) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
482 XFlush (FRAME_X_DISPLAY (f)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
483 UNBLOCK_INPUT; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
484 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
485 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
486 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
487 /* 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
|
488 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
|
489 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
|
490 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
|
491 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
|
492 performance. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
493 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
494 #define XFlush(DISPLAY) (void) 0 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
495 |
|
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
496 |
|
24991
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 Debugging |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
499 ***********************************************************************/ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
500 |
|
12192
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
501 #if 0 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
502 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
503 /* 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
|
504 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
|
505 |
|
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
506 struct record |
|
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
507 { |
|
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
508 char *locus; |
|
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
509 int type; |
|
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
510 }; |
|
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
511 |
|
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
512 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
|
513 |
|
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
514 int event_record_index; |
|
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
515 |
|
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
516 record_event (locus, type) |
|
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
517 char *locus; |
|
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
518 int type; |
|
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 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
|
521 event_record_index = 0; |
|
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 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
|
524 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
|
525 event_record_index++; |
|
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
526 } |
|
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 #endif /* 0 */ |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
529 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
530 |
|
12192
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
531 |
|
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
532 /* 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
|
533 |
|
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
534 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
|
535 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
|
536 Display *dpy; |
|
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
537 { |
|
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
538 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
|
539 |
|
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
540 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
|
541 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
|
542 return dpyinfo; |
|
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
543 |
|
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
544 return 0; |
|
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
545 } |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
546 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
547 |
|
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
548 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
549 /*********************************************************************** |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
550 Starting and ending an update |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
551 ***********************************************************************/ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
552 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
553 /* 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
|
554 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
|
555 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
|
556 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
|
557 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
|
558 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
559 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
560 x_update_begin (f) |
| 771 | 561 struct frame *f; |
|
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
562 { |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
563 /* Nothing to do. */ |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
566 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
567 /* 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
|
568 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
|
569 position of W. */ |
|
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_window_begin (w) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
573 struct window *w; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
574 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
575 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
|
576 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
|
577 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
578 updated_window = w; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
579 set_output_cursor (&w->cursor); |
| 286 | 580 |
| 581 BLOCK_INPUT; | |
|
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
582 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
583 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
|
584 { |
|
6660
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
585 /* 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
|
586 display_info->mouse_face_defer = 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
587 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
588 /* 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
|
589 highlighting. */ |
|
10274
83aaf59dabbe
(XTupdate_begin): Fix backward test in previous change.
Richard M. Stallman <rms@gnu.org>
parents:
10223
diff
changeset
|
590 if (FRAME_GARBAGED_P (f)) |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
591 display_info->mouse_face_window = Qnil; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
592 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
593 /* 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
|
594 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
|
595 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
|
596 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
|
597 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
|
598 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
|
599 && 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
|
600 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
601 int i; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
602 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
603 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
|
604 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
|
605 break; |
|
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
606 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
607 if (i < w->desired_matrix->nrows) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
608 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
|
609 } |
|
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
610 } |
|
8781
98741404d3e0
Delete X11 conditionals.
Richard M. Stallman <rms@gnu.org>
parents:
8724
diff
changeset
|
611 |
| 286 | 612 UNBLOCK_INPUT; |
| 613 } | |
| 614 | |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
615 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
616 /* 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
|
617 have vertical scroll bars. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
618 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
619 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
620 x_draw_vertical_border (w) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
621 struct window *w; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
622 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
623 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
|
624 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
625 /* 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
|
626 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
|
627 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
|
628 neighbor will suffice as a border. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
629 if (!WINDOW_RIGHTMOST_P (w) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
630 && !FRAME_HAS_VERTICAL_SCROLL_BARS (f)) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
631 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
632 int x0, x1, y0, y1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
633 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
634 window_box_edges (w, -1, &x0, &y0, &x1, &y1); |
| 25465 | 635 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
|
636 y1 -= 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
637 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
638 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
|
639 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
|
640 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
641 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
642 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
643 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
644 /* End update of window W (which is equal to updated_window). Draw |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
645 vertical borders between horizontally adjacent windows, and display |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
646 W's cursor if CURSOR_ON_P is non-zero. W may be a menu bar |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
647 pseudo-window in case we don't have X toolkit support. Such |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
648 windows don't have a cursor, so don't display it here. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
649 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
650 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
651 x_update_window_end (w, cursor_on_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
652 struct window *w; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
653 int cursor_on_p; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
654 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
655 if (!w->pseudo_window_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
656 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
657 BLOCK_INPUT; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
658 if (cursor_on_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
659 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
|
660 output_cursor.vpos, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
661 output_cursor.x, output_cursor.y); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
662 x_draw_vertical_border (w); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
663 UNBLOCK_INPUT; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
664 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
665 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
666 updated_window = NULL; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
667 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
668 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
669 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
670 /* 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
|
671 update_end. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
672 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
673 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
674 x_update_end (f) |
| 771 | 675 struct frame *f; |
|
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
676 { |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
677 /* Mouse highlight may be displayed again. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
678 FRAME_X_DISPLAY_INFO (f)->mouse_face_defer = 0; |
| 286 | 679 |
| 680 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
|
681 XFlush (FRAME_X_DISPLAY (f)); |
| 286 | 682 UNBLOCK_INPUT; |
| 683 } | |
|
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
684 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
685 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
686 /* 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
|
687 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
|
688 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
|
689 |
| 21514 | 690 static void |
|
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
691 XTframe_up_to_date (f) |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
692 struct frame *f; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
693 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
694 if (FRAME_X_P (f)) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
695 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
696 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
|
697 if (dpyinfo->mouse_face_deferred_gc |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
698 || f == dpyinfo->mouse_face_mouse_frame) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
699 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
700 BLOCK_INPUT; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
701 if (dpyinfo->mouse_face_mouse_frame) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
702 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
|
703 dpyinfo->mouse_face_mouse_x, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
704 dpyinfo->mouse_face_mouse_y); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
705 dpyinfo->mouse_face_deferred_gc = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
706 UNBLOCK_INPUT; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
707 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
708 } |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
712 /* 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
|
713 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
|
714 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
|
715 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
|
716 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
|
717 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
|
718 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
719 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
720 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
|
721 struct glyph_row *desired_row; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
722 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
723 struct window *w = updated_window; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
724 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
725 xassert (w); |
|
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 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
|
728 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
729 BLOCK_INPUT; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
730 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
|
731 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
732 /* 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
|
733 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
|
734 if (windows_or_buffers_changed) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
735 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
736 struct frame *f = XFRAME (w->frame); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
737 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
|
738 int height = desired_row->visible_height; |
| 25465 | 739 int x = (window_box_right (w, -1) |
| 740 + 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
|
741 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
|
742 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
743 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
|
744 x, y, width, height, False); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
745 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
746 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
747 UNBLOCK_INPUT; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
748 } |
|
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 /* 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
|
753 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
|
754 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
|
755 drawn. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
756 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
757 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
758 x_draw_bitmap (w, row, which) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
759 struct window *w; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
760 struct glyph_row *row; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
761 enum bitmap_type which; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
762 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
763 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
|
764 Display *display = FRAME_X_DISPLAY (f); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
765 Window window = FRAME_X_WINDOW (f); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
766 int x, y, wd, h, dy; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
767 unsigned char *bits; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
768 Pixmap pixmap; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
769 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
|
770 struct face *face; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
771 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
|
772 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
773 /* 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
|
774 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
|
775 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
776 switch (which) |
|
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 case LEFT_TRUNCATION_BITMAP: |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
779 wd = left_width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
780 h = left_height; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
781 bits = left_bits; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
782 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
|
783 - wd |
| 25465 | 784 - (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
|
785 break; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
786 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
787 case OVERLAY_ARROW_BITMAP: |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
788 wd = left_width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
789 h = left_height; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
790 bits = ov_bits; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
791 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
|
792 - wd |
| 25465 | 793 - (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
|
794 break; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
795 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
796 case RIGHT_TRUNCATION_BITMAP: |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
797 wd = right_width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
798 h = right_height; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
799 bits = right_bits; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
800 x = window_box_right (w, -1); |
| 25465 | 801 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
|
802 break; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
803 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
804 case CONTINUED_LINE_BITMAP: |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
805 wd = right_width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
806 h = right_height; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
807 bits = continued_bits; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
808 x = window_box_right (w, -1); |
| 25465 | 809 x += (FRAME_X_RIGHT_FLAGS_AREA_WIDTH (f) - wd) / 2; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
810 break; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
811 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
812 case CONTINUATION_LINE_BITMAP: |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
813 wd = continuation_width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
814 h = continuation_height; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
815 bits = continuation_bits; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
816 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
|
817 - wd |
| 25465 | 818 - (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
|
819 break; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
820 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
821 case ZV_LINE_BITMAP: |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
822 wd = zv_width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
823 h = zv_height; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
824 bits = zv_bits; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
825 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
|
826 - wd |
| 25465 | 827 - (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
|
828 break; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
829 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
830 default: |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
831 abort (); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
832 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
833 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
834 /* 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
|
835 start drawing the bitmap. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
836 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
|
837 dy = (row->height - h) / 2; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
838 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
839 /* 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
|
840 by the server. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
841 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
|
842 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
|
843 face->foreground, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
844 face->background, depth); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
845 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
|
846 XFreePixmap (display, pixmap); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
847 XSetClipMask (display, gc, None); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
848 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
849 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
850 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
851 /* Draw 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
|
852 function with input blocked. */ |
|
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 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
855 x_draw_row_bitmaps (w, row) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
856 struct window *w; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
857 struct glyph_row *row; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
858 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
859 struct frame *f = XFRAME (w->frame); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
860 enum bitmap_type bitmap; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
861 struct face *face; |
| 25546 | 862 int header_line_height = -1; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
863 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
864 xassert (interrupt_input_blocked); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
865 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
866 /* 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
|
867 don't have to draw anything. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
868 if (row->visible_height <= 0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
869 return; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
870 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
871 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
|
872 PREPARE_FACE_FOR_DISPLAY (f, face); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
873 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
874 /* 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
|
875 if (row->overlay_arrow_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
876 bitmap = OVERLAY_ARROW_BITMAP; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
877 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
|
878 bitmap = LEFT_TRUNCATION_BITMAP; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
879 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
|
880 bitmap = CONTINUATION_LINE_BITMAP; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
881 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
|
882 bitmap = ZV_LINE_BITMAP; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
883 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
884 bitmap = NO_BITMAP; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
885 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
886 /* 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
|
887 the flags area. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
888 if (bitmap == NO_BITMAP |
| 25465 | 889 || 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
|
890 || 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
|
891 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
892 /* 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
|
893 int border = ((XFASTINT (w->left) > 0 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
894 && !FRAME_HAS_VERTICAL_SCROLL_BARS (f)) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
895 ? 1 : 0); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
896 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
|
897 |
| 25546 | 898 if (header_line_height < 0) |
| 899 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
|
900 |
|
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
901 /* 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
|
902 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
|
903 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
|
904 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
|
905 if (face->stipple) |
|
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
906 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
|
907 else |
|
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
908 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
|
909 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
910 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
|
911 face->gc, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
912 (left |
| 25465 | 913 - 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
|
914 + border), |
| 25546 | 915 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
|
916 row->y)), |
| 25465 | 917 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
|
918 row->visible_height); |
|
25091
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
919 if (!face->stipple) |
|
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
920 XSetForeground (FRAME_X_DISPLAY (f), face->gc, face->foreground); |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
921 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
922 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
923 /* Draw the left bitmap. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
924 if (bitmap != NO_BITMAP) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
925 x_draw_bitmap (w, row, bitmap); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
926 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
927 /* 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
|
928 if (row->truncated_on_right_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
929 bitmap = RIGHT_TRUNCATION_BITMAP; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
930 else if (row->continued_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
931 bitmap = CONTINUED_LINE_BITMAP; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
932 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
933 bitmap = NO_BITMAP; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
934 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
935 /* 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
|
936 the flags area. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
937 if (bitmap == NO_BITMAP |
| 25465 | 938 || 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
|
939 || 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
|
940 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
941 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
|
942 |
| 25546 | 943 if (header_line_height < 0) |
| 944 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
|
945 |
|
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
946 /* 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
|
947 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
|
948 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
|
949 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
|
950 if (face->stipple) |
|
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
951 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
|
952 else |
|
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
953 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
|
954 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
|
955 face->gc, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
956 right, |
| 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_RIGHT_FLAGS_AREA_WIDTH (f), |
|
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 right 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 |
| 286 | 970 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
971 /*********************************************************************** |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
972 Line Highlighting |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
973 ***********************************************************************/ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
974 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
975 /* 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
|
976 frames. Aborts when called. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
977 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
978 static void |
| 286 | 979 XTreassert_line_highlight (new, vpos) |
| 980 int new, vpos; | |
| 981 { | |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
982 abort (); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
983 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
984 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
985 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
986 /* 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
|
987 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
|
988 called. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
989 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
990 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
991 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
|
992 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
|
993 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
994 abort (); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
995 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
996 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
997 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
998 /* 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
|
999 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
|
1000 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
|
1001 rarely happens). */ |
| 286 | 1002 |
| 21514 | 1003 static void |
| 286 | 1004 XTset_terminal_modes () |
| 1005 { | |
| 1006 } | |
| 1007 | |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1008 /* 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
|
1009 the X-windows go away, and suspending requires no action. */ |
| 286 | 1010 |
| 21514 | 1011 static void |
| 286 | 1012 XTreset_terminal_modes () |
| 1013 { | |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1014 } |
|
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 |
| 286 | 1017 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1018 /*********************************************************************** |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1019 Output Cursor |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1020 ***********************************************************************/ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1021 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1022 /* 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
|
1023 positions are relative to updated_window. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1024 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1025 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1026 set_output_cursor (cursor) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1027 struct cursor_pos *cursor; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1028 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1029 output_cursor.hpos = cursor->hpos; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1030 output_cursor.vpos = cursor->vpos; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1031 output_cursor.x = cursor->x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1032 output_cursor.y = cursor->y; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1033 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1034 |
|
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 /* Set a nominal cursor position. |
|
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 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
|
1039 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
|
1040 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1041 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
|
1042 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
|
1043 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
|
1044 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
|
1045 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1046 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1047 XTcursor_to (vpos, hpos, y, x) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1048 int vpos, hpos, y, x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1049 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1050 struct window *w; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1051 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1052 /* 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
|
1053 if (updated_window) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1054 w = updated_window; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1055 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1056 w = XWINDOW (selected_window); |
|
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 /* Set the output cursor. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1059 output_cursor.hpos = hpos; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1060 output_cursor.vpos = vpos; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1061 output_cursor.x = x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1062 output_cursor.y = y; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1063 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1064 /* If 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
|
1065 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
|
1066 if (updated_window == NULL) |
| 286 | 1067 { |
| 1068 BLOCK_INPUT; | |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1069 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
|
1070 XFlush (FRAME_X_DISPLAY (SELECTED_FRAME ())); |
| 286 | 1071 UNBLOCK_INPUT; |
| 1072 } | |
| 1073 } | |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1074 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1075 |
| 286 | 1076 |
|
24991
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 Display Iterator |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1081 /* Function prototypes of this page. */ |
|
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 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
|
1084 struct glyph *, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1085 XChar2b *)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1086 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
|
1087 int, XChar2b *, int)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1088 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
|
1089 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
|
1090 static void x_append_glyph P_ ((struct it *)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1091 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
|
1092 int, int, double)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1093 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
|
1094 static void x_produce_image_glyph P_ ((struct it *it)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1095 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1096 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1097 /* Return a pointer to per-char metric information in FONT of a |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1098 character pointed by B which is a pointer to an XChar2b. */ |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
1099 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
1100 #define PER_CHAR_METRIC(font, b) \ |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
1101 ((font)->per_char \ |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
1102 ? ((font)->per_char + (b)->byte2 - (font)->min_char_or_byte2 \ |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
1103 + (((font)->min_byte1 || (font)->max_byte1) \ |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
1104 ? (((b)->byte1 - (font)->min_byte1) \ |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
1105 * ((font)->max_char_or_byte2 - (font)->min_char_or_byte2 + 1)) \ |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
1106 : 0)) \ |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
1107 : &((font)->max_bounds)) |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
1108 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1109 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1110 /* Get metrics of character CHAR2B in FONT. Value is always non-null. |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1111 If CHAR2B is not contained in FONT, the font's default character |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1112 metric is returned. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1113 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1114 static INLINE XCharStruct * |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1115 x_per_char_metric (font, char2b) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1116 XFontStruct *font; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1117 XChar2b *char2b; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1118 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1119 /* The result metric information. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1120 XCharStruct *pcm = NULL; |
|
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 xassert (font && char2b); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1123 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1124 if (font->per_char != NULL) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1125 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1126 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
|
1127 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1128 /* 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
|
1129 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
|
1130 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
|
1131 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
|
1132 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
|
1133 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
|
1134 if (char2b->byte1 == 0 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1135 && 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
|
1136 && 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
|
1137 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
|
1138 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1139 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1140 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1141 /* 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
|
1142 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
|
1143 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
|
1144 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
|
1145 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1146 byte1 = N/D + min_byte1 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1147 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
|
1148 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1149 where: |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1150 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1151 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
|
1152 / = integer division |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1153 \ = integer modulus */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1154 if (char2b->byte1 >= font->min_byte1 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1155 && char2b->byte1 <= font->max_byte1 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1156 && 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
|
1157 && 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
|
1158 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1159 pcm = (font->per_char |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1160 + ((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
|
1161 * (char2b->byte1 - font->min_byte1)) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1162 + (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
|
1163 } |
|
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 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1166 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1167 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1168 /* 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
|
1169 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
|
1170 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
|
1171 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
|
1172 && 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
|
1173 pcm = &font->max_bounds; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1174 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1175 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1176 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1177 if (pcm == NULL || pcm->width == 0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1178 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1179 /* Character not contained in the font. FONT->default_char |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1180 gives the character that will be printed. FONT->default_char |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1181 is a 16-bit character code with byte1 in the most significant |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1182 byte and byte2 in the least significant byte. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1183 XChar2b default_char; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1184 default_char.byte1 = (font->default_char >> BITS_PER_CHAR) & 0xff; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1185 default_char.byte2 = font->default_char & 0xff; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1186 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1187 /* Avoid an endless recursion if FONT->default_char itself |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1188 hasn't per char metrics. handa@etl.go.jp reports that some |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1189 fonts have this problem. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1190 if (default_char.byte1 != char2b->byte1 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1191 || default_char.byte2 != char2b->byte2) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1192 pcm = x_per_char_metric (font, &default_char); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1193 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1194 pcm = &font->max_bounds; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1195 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1196 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1197 return pcm; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1198 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1199 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1200 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1201 /* 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
|
1202 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
|
1203 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1204 static INLINE void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1205 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
|
1206 int c; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1207 XChar2b *char2b; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1208 struct font_info *font_info; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1209 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1210 int charset = CHAR_CHARSET (c); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1211 XFontStruct *font = font_info->font; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1212 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1213 /* 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
|
1214 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
|
1215 fixed encoding. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1216 if (font_info->font_encoder) |
|
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 /* It's a program. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1219 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
|
1220 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1221 if (CHARSET_DIMENSION (charset) == 1) |
|
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 ccl->reg[0] = charset; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1224 ccl->reg[1] = char2b->byte2; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1225 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1226 else |
|
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 ccl->reg[0] = charset; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1229 ccl->reg[1] = char2b->byte1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1230 ccl->reg[2] = char2b->byte2; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1231 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1232 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1233 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
|
1234 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1235 /* 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
|
1236 program. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1237 if (font->max_byte1 == 0) /* 1-byte font */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1238 char2b->byte2 = ccl->reg[1]; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1239 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1240 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
|
1241 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1242 else if (font_info->encoding[charset]) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1243 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1244 /* 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
|
1245 encoding numbers. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1246 int enc = font_info->encoding[charset]; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1247 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1248 if ((enc == 1 || enc == 2) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1249 && CHARSET_DIMENSION (charset) == 2) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1250 char2b->byte1 |= 0x80; |
|
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 if (enc == 1 || enc == 3) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1253 char2b->byte2 |= 0x80; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1254 } |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1258 /* 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
|
1259 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
|
1260 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
|
1261 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
|
1262 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1263 static INLINE struct face * |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1264 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
|
1265 struct frame *f; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1266 int c, face_id; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1267 XChar2b *char2b; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1268 int multibyte_p; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1269 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1270 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
|
1271 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1272 if (!multibyte_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1273 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1274 /* 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
|
1275 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
|
1276 char2b->byte1 = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1277 char2b->byte2 = c; |
|
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 if (!FACE_SUITABLE_FOR_CHARSET_P (face, -1)) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1280 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1281 face_id = FACE_FOR_CHARSET (f, face_id, -1); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1282 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
|
1283 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1284 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1285 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
|
1286 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1287 /* 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
|
1288 char2b->byte1 = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1289 char2b->byte2 = c; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1290 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1291 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1292 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1293 int c1, c2, charset; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1294 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1295 /* 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
|
1296 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
|
1297 SPLIT_CHAR (c, charset, c1, c2); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1298 if (c2 > 0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1299 char2b->byte1 = c1, char2b->byte2 = c2; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1300 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1301 char2b->byte1 = 0, char2b->byte2 = c1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1302 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1303 /* Get the face for displaying C. If `face' is not suitable for |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1304 charset, get the one that fits. (This can happen for the |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1305 translations of composite characters where the glyph |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1306 specifies a face for ASCII, but translations have a different |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1307 charset.) */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1308 if (!FACE_SUITABLE_FOR_CHARSET_P (face, charset)) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1309 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1310 face_id = FACE_FOR_CHARSET (f, face_id, charset); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1311 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
|
1312 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1313 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1314 /* Maybe encode the character in *CHAR2B. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1315 if (charset != CHARSET_ASCII) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1316 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1317 struct font_info *font_info |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1318 = 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
|
1319 if (font_info) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1320 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1321 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
|
1322 if (charset == charset_latin_iso8859_1) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1323 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1324 xassert (((XFontStruct *) font_info->font)->max_char_or_byte2 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1325 >= 0x80); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1326 char2b->byte2 |= 0x80; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1327 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1328 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1329 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1330 } |
|
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 /* 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
|
1333 xassert (face != NULL); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1334 PREPARE_FACE_FOR_DISPLAY (f, face); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1335 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1336 return face; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1337 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1338 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1339 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1340 /* Get face and two-byte form of character glyph GLYPH on frame F. |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1341 The encoding of GLYPH->u.ch.code is returned in *CHAR2B. Value is |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1342 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
|
1343 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1344 static INLINE struct face * |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1345 x_get_glyph_face_and_encoding (f, glyph, char2b) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1346 struct frame *f; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1347 struct glyph *glyph; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1348 XChar2b *char2b; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1349 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1350 struct face *face; |
|
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 xassert (glyph->type == CHAR_GLYPH); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1353 face = FACE_FROM_ID (f, glyph->u.ch.face_id); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1354 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1355 if (!glyph->multibyte_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1356 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1357 /* 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
|
1358 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
|
1359 char2b->byte1 = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1360 char2b->byte2 = glyph->u.ch.code; |
|
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 else if (glyph->u.ch.code < 128 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1363 && glyph->u.ch.face_id < BASIC_FACE_ID_SENTINEL) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1364 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1365 /* 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
|
1366 char2b->byte1 = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1367 char2b->byte2 = glyph->u.ch.code; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1368 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1369 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1370 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1371 int c1, c2, charset; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1372 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1373 /* 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
|
1374 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
|
1375 SPLIT_CHAR (glyph->u.ch.code, charset, c1, c2); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1376 if (c2 > 0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1377 char2b->byte1 = c1, char2b->byte2 = c2; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1378 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1379 char2b->byte1 = 0, char2b->byte2 = c1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1380 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1381 /* Maybe encode the character in *CHAR2B. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1382 if (charset != CHARSET_ASCII) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1383 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1384 struct font_info *font_info |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1385 = 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
|
1386 if (font_info) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1387 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1388 x_encode_char (glyph->u.ch.code, char2b, font_info); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1389 if (charset == charset_latin_iso8859_1) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1390 char2b->byte2 |= 0x80; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1391 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1392 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1393 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1394 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1395 /* 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
|
1396 xassert (face != NULL); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1397 PREPARE_FACE_FOR_DISPLAY (f, face); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1398 return face; |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1402 /* 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
|
1403 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
|
1404 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1405 static INLINE void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1406 x_append_glyph (it) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1407 struct it *it; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1408 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1409 struct glyph *glyph; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1410 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
|
1411 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1412 xassert (it->glyph_row); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1413 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
|
1414 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1415 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
|
1416 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
|
1417 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1418 /* Play it safe. If sub-structures of the glyph are not all the |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1419 same size, it otherwise be that some bits stay set. This |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1420 would prevent a comparison with GLYPH_EQUAL_P. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1421 glyph->u.val = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1422 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1423 glyph->type = CHAR_GLYPH; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1424 glyph->pixel_width = it->pixel_width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1425 glyph->u.ch.code = it->char_to_display; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1426 glyph->u.ch.face_id = it->face_id; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1427 glyph->charpos = CHARPOS (it->position); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1428 glyph->object = it->object; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1429 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
|
1430 glyph->right_box_line_p = it->end_of_box_run_p; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1431 glyph->voffset = it->voffset; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1432 glyph->multibyte_p = it->multibyte_p; |
|
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
1433 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
|
1434 || it->phys_descent > it->descent); |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1435 ++it->glyph_row->used[area]; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1436 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1437 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1438 |
|
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 /* 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
|
1441 IT->voffset. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1442 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1443 static INLINE void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1444 take_vertical_position_into_account (it) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1445 struct it *it; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1446 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1447 if (it->voffset) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1448 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1449 if (it->voffset < 0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1450 /* 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
|
1451 in the line. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1452 it->ascent += abs (it->voffset); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1453 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1454 /* 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
|
1455 in the line. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1456 it->descent += it->voffset; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1457 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1458 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1459 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1460 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1461 /* 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
|
1462 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
|
1463 an overview of struct display_iterator. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1464 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1465 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1466 x_produce_image_glyph (it) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1467 struct it *it; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1468 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1469 struct image *img; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1470 struct face *face; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1471 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1472 xassert (it->what == IT_IMAGE); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1473 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1474 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
|
1475 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
|
1476 xassert (img); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1477 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1478 /* 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
|
1479 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
|
1480 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
|
1481 |
|
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
1482 it->ascent = it->phys_ascent = IMAGE_ASCENT (img); |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
1483 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
|
1484 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
|
1485 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1486 it->nglyphs = 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1487 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1488 if (face->box != FACE_NO_BOX) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1489 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1490 it->ascent += face->box_line_width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1491 it->descent += face->box_line_width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1492 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1493 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
|
1494 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
|
1495 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
|
1496 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
|
1497 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1498 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1499 take_vertical_position_into_account (it); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1500 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1501 if (it->glyph_row) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1502 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1503 struct glyph *glyph; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1504 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
|
1505 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1506 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
|
1507 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
|
1508 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1509 glyph->type = IMAGE_GLYPH; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1510 glyph->u.img.id = img->id; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1511 glyph->u.img.face_id = it->face_id; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1512 glyph->pixel_width = it->pixel_width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1513 glyph->charpos = CHARPOS (it->position); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1514 glyph->object = it->object; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1515 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
|
1516 glyph->right_box_line_p = it->end_of_box_run_p; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1517 glyph->voffset = it->voffset; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1518 glyph->multibyte_p = it->multibyte_p; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1519 ++it->glyph_row->used[area]; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1520 } |
|
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 } |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1525 /* 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
|
1526 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
|
1527 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
|
1528 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
|
1529 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1530 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1531 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
|
1532 struct it *it; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1533 Lisp_Object object; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1534 int width, height; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1535 double ascent; |
|
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 struct glyph *glyph; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1538 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
|
1539 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1540 xassert (ascent >= 0 && ascent <= 1); |
|
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->type = STRETCH_GLYPH; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1546 glyph->u.stretch.ascent = height * ascent; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1547 glyph->u.stretch.height = height; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1548 glyph->u.stretch.face_id = it->face_id; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1549 glyph->pixel_width = width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1550 glyph->charpos = CHARPOS (it->position); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1551 glyph->object = object; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1552 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
|
1553 glyph->right_box_line_p = it->end_of_box_run_p; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1554 glyph->voffset = it->voffset; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1555 glyph->multibyte_p = it->multibyte_p; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1556 ++it->glyph_row->used[area]; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1557 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1558 } |
|
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 /* 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
|
1562 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
|
1563 `(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
|
1564 being recognized: |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1565 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1566 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
|
1567 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
|
1568 point number. |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1569 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1570 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
|
1571 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
|
1572 `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
|
1573 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1574 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
|
1575 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
|
1576 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1577 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
|
1578 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1579 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
|
1580 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
|
1581 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1582 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
|
1583 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
|
1584 the glyph property. |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1585 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1586 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
|
1587 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1588 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
|
1589 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
|
1590 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
|
1591 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1592 #define NUMVAL(X) \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1593 ((INTEGERP (X) || FLOATP (X)) \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1594 ? XFLOATINT (X) \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1595 : - 1) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1596 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1597 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1598 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1599 x_produce_stretch_glyph (it) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1600 struct it *it; |
|
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 /* (space :width WIDTH :height HEIGHT. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1603 extern Lisp_Object QCwidth, QCheight, QCascent, Qspace; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1604 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
|
1605 extern Lisp_Object QCalign_to; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1606 Lisp_Object prop, plist; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1607 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
|
1608 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
|
1609 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
|
1610 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1611 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
|
1612 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1613 /* List should start with `space'. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1614 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
|
1615 plist = XCDR (it->object); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1616 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1617 /* Compute the width of the stretch. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1618 if (prop = Fplist_get (plist, QCwidth), |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1619 NUMVAL (prop) > 0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1620 /* 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
|
1621 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
|
1622 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
|
1623 NUMVAL (prop) > 0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1624 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1625 /* 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
|
1626 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
|
1627 property. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1628 struct it it2; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1629 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
|
1630 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1631 it2 = *it; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1632 if (it->multibyte_p) |
|
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 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
|
1635 - IT_BYTEPOS (*it)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1636 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
|
1637 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1638 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1639 it2.c = *p, it2.len = 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1640 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1641 it2.glyph_row = NULL; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1642 it2.what = IT_CHARACTER; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1643 x_produce_glyphs (&it2); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1644 width = NUMVAL (prop) * it2.pixel_width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1645 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1646 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
|
1647 NUMVAL (prop) > 0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1648 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
|
1649 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1650 /* 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
|
1651 width = CANON_X_UNIT (it->f); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1652 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1653 /* Compute height. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1654 if (prop = Fplist_get (plist, QCheight), |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1655 NUMVAL (prop) > 0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1656 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
|
1657 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
|
1658 NUMVAL (prop) > 0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1659 height = FONT_HEIGHT (font) * NUMVAL (prop); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1660 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1661 height = FONT_HEIGHT (font); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1662 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1663 /* 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
|
1664 `: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
|
1665 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
|
1666 if (prop = Fplist_get (plist, QCascent), |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1667 NUMVAL (prop) > 0 && NUMVAL (prop) <= 100) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1668 ascent = NUMVAL (prop) / 100.0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1669 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1670 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
|
1671 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1672 if (width <= 0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1673 width = 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1674 if (height <= 0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1675 height = 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1676 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1677 if (it->glyph_row) |
|
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 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
|
1680 if (!STRINGP (object)) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1681 object = it->w->buffer; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1682 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
|
1683 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1684 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1685 it->pixel_width = width; |
|
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
1686 it->ascent = it->phys_ascent = height * ascent; |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
1687 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
|
1688 it->nglyphs = 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1689 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1690 if (face->box != FACE_NO_BOX) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1691 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1692 it->ascent += face->box_line_width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1693 it->descent += face->box_line_width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1694 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1695 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
|
1696 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
|
1697 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
|
1698 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
|
1699 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1700 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1701 take_vertical_position_into_account (it); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1702 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1703 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1704 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1705 /* 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
|
1706 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
|
1707 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
|
1708 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1709 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1710 x_produce_glyphs (it) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1711 struct it *it; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1712 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1713 if (it->what == IT_CHARACTER) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1714 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1715 XChar2b char2b; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1716 XFontStruct *font; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1717 struct face *face; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1718 XCharStruct *pcm; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1719 int font_not_found_p; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1720 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1721 /* Maybe translate single-byte characters to multibyte. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1722 it->char_to_display = it->c; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1723 if (unibyte_display_via_language_environment |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1724 && SINGLE_BYTE_CHAR_P (it->c) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1725 && (it->c >= 0240 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1726 || (it->c >= 0200 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1727 && !NILP (Vnonascii_translation_table)))) |
|
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 it->char_to_display = unibyte_char_to_multibyte (it->c); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1730 it->charset = CHAR_CHARSET (it->char_to_display); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1731 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1732 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1733 /* Get face and font to use. Encode IT->char_to_display. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1734 face = x_get_char_face_and_encoding (it->f, it->char_to_display, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1735 it->face_id, &char2b, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1736 it->multibyte_p); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1737 font = face->font; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1738 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1739 /* 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
|
1740 font_not_found_p = font == NULL; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1741 if (font_not_found_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1742 font = FRAME_FONT (it->f); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1743 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1744 if (it->char_to_display >= ' ' |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1745 && (!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
|
1746 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1747 /* Either unibyte or ASCII. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1748 int stretched_p; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1749 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1750 it->nglyphs = 1; |
|
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
1751 |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
1752 pcm = 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
|
1753 it->ascent = font->ascent; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1754 it->descent = font->descent; |
|
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
1755 it->phys_ascent = pcm->ascent; |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
1756 it->phys_descent = pcm->descent; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1757 it->pixel_width = pcm->width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1758 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1759 /* 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
|
1760 `space-width' property, change its width. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1761 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
|
1762 if (stretched_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1763 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
|
1764 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1765 /* 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
|
1766 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
|
1767 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
|
1768 if (face->box != FACE_NO_BOX) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1769 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1770 int thick = face->box_line_width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1771 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1772 it->ascent += thick; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1773 it->descent += thick; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1774 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1775 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
|
1776 it->pixel_width += thick; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1777 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
|
1778 it->pixel_width += thick; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1779 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1780 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1781 /* 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
|
1782 (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
|
1783 if (face->overline_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1784 it->ascent += 2; |
|
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 take_vertical_position_into_account (it); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1787 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1788 /* 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
|
1789 if (it->glyph_row) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1790 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1791 if (stretched_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1792 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1793 /* 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
|
1794 into a stretch glyph. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1795 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
|
1796 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
|
1797 it->ascent + it->descent, ascent); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1798 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1799 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1800 x_append_glyph (it); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1801 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1802 /* 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
|
1803 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
|
1804 glyph row. This is used to optimize X output code. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1805 if (pcm->lbearing < 0 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1806 || pcm->rbearing > pcm->width) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1807 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
|
1808 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1809 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1810 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
|
1811 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1812 /* 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
|
1813 it->pixel_width = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1814 it->nglyphs = 0; |
|
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
1815 it->ascent = it->phys_ascent = font->ascent; |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
1816 it->descent = it->phys_descent = font->descent; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1817 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1818 if (face->box != FACE_NO_BOX) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1819 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1820 int thick = face->box_line_width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1821 it->ascent += thick; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1822 it->descent += thick; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1823 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1824 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1825 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
|
1826 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1827 int tab_width = it->tab_width * CANON_X_UNIT (it->f); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1828 int x = (it->current_x |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1829 - it->prompt_width |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1830 + it->continuation_lines_width); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1831 int next_tab_x = ((1 + x + tab_width - 1) / tab_width) * tab_width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1832 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1833 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
|
1834 it->nglyphs = 1; |
|
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
1835 it->ascent = it->phys_ascent = font->ascent; |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
1836 it->descent = it->phys_descent = font->descent; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1837 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1838 if (it->glyph_row) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1839 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1840 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
|
1841 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
|
1842 it->ascent + it->descent, ascent); |
|
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 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1845 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1846 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1847 /* 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
|
1848 character is the width of the character multiplied by the |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1849 width of the font. There has to be better support for |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1850 variable sizes in cmpchar_info to do anything better than |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1851 that. |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1852 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1853 Note: composite characters are represented as one glyph in |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1854 the glyph matrix. There are no padding glyphs. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1855 if (it->charset == CHARSET_COMPOSITION) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1856 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1857 struct cmpchar_info *cmpcharp; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1858 int idx; |
|
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 idx = COMPOSITE_CHAR_ID (it->char_to_display); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1861 cmpcharp = cmpchar_table[idx]; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1862 it->pixel_width = font->max_bounds.width * cmpcharp->width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1863 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1864 /* There are no padding glyphs, so there is only one glyph |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1865 to produce for the composite char. Important is that |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1866 pixel_width, ascent and descent are the values of what is |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1867 drawn by draw_glyphs. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1868 it->nglyphs = 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1869 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1870 /* These settings may not be correct. We must have more |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1871 information in cmpcharp to do the correct setting. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1872 it->ascent = font->ascent; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1873 it->descent = font->descent; |
|
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
1874 it->phys_ascent = font->max_bounds.ascent; |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
1875 it->phys_descent = font->max_bounds.descent; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1876 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1877 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1878 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1879 /* If we found a font, this font should give us the right |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1880 metrics. If we didn't find a font, use the frame's |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1881 default font and calculate the width of the character |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1882 from the charset width; this is what old redisplay code |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1883 did. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1884 pcm = x_per_char_metric (font, &char2b); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1885 it->pixel_width = pcm->width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1886 if (font_not_found_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1887 it->pixel_width *= CHARSET_WIDTH (it->charset); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1888 it->nglyphs = 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1889 it->ascent = font->ascent; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1890 it->descent = font->descent; |
|
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
1891 it->phys_ascent = pcm->ascent; |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
1892 it->phys_descent = pcm->descent; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1893 if (it->glyph_row |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1894 && (pcm->lbearing < 0 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1895 || pcm->rbearing > pcm->width)) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1896 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
|
1897 } |
|
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 if (face->box != FACE_NO_BOX) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1900 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1901 int thick = face->box_line_width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1902 it->ascent += thick; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1903 it->descent += thick; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1904 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1905 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
|
1906 it->pixel_width += thick; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1907 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
|
1908 it->pixel_width += thick; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1909 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1910 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1911 /* 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
|
1912 (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
|
1913 if (face->overline_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1914 it->ascent += 2; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1915 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1916 take_vertical_position_into_account (it); |
|
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 (it->glyph_row) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1919 x_append_glyph (it); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1920 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1921 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1922 else if (it->what == IT_IMAGE) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1923 x_produce_image_glyph (it); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1924 else if (it->what == IT_STRETCH) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1925 x_produce_stretch_glyph (it); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1926 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1927 /* Accumulate dimensions. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1928 xassert (it->ascent >= 0 && it->descent > 0); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1929 if (it->area == TEXT_AREA) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1930 it->current_x += it->pixel_width; |
|
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
1931 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1932 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
|
1933 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
|
1934 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
|
1935 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
|
1936 } |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1939 /* 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
|
1940 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
|
1941 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1942 int |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1943 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
|
1944 struct frame *f; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1945 enum face_id face_id; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1946 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1947 int height = 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1948 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1949 /* 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
|
1950 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
|
1951 if (FRAME_FACE_CACHE (f)) |
|
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 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
|
1954 if (face) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1955 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
|
1956 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1957 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1958 return height; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1959 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1960 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1961 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1962 /*********************************************************************** |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1963 Glyph display |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1964 ***********************************************************************/ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1965 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1966 /* 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
|
1967 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1968 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
|
1969 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
|
1970 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
|
1971 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
|
1972 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1973 struct glyph_string |
|
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 /* X-origin of the string. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1976 int x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1977 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1978 /* 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
|
1979 int y, ybase; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1980 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1981 /* 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
|
1982 int width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1983 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1984 /* 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
|
1985 int background_width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1986 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1987 /* 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
|
1988 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
|
1989 font the string is drawn in. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1990 int height; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1991 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1992 /* 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
|
1993 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
|
1994 -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
|
1995 int left_overhang; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1996 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
1997 /* 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
|
1998 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
|
1999 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
|
2000 int right_overhang; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2001 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2002 /* 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
|
2003 struct frame *f; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2004 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2005 /* 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
|
2006 struct window *w; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2007 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2008 /* X display and window for convenience. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2009 Display *display; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2010 Window window; |
|
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 /* 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
|
2013 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
|
2014 struct glyph_row *row; |
|
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 /* The area within row. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2017 enum glyph_row_area area; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2018 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2019 /* 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
|
2020 XChar2b *char2b; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2021 int nchars; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2022 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2023 /* Character set of this glyph string. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2024 int charset; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2025 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2026 /* 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
|
2027 enum draw_glyphs_face hl; |
|
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 /* 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
|
2030 struct face *face; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2031 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2032 /* 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
|
2033 XFontStruct *font; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2034 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2035 /* Font info for this string. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2036 struct font_info *font_info; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2037 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2038 /* Non-null means this string describes (part of) a composite |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2039 character. All characters from char2b are drawn at the same |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2040 x-origin in that case. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2041 struct cmpchar_info *cmpcharp; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2042 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2043 /* Index of this glyph string's first character in the glyph |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2044 definition of cmpcharp. If this is zero, this glyph string |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2045 describes the first character of a composite character. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2046 int gidx; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2047 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2048 /* 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
|
2049 of the window's drawing area. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2050 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
|
2051 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2052 /* 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
|
2053 unsigned background_filled_p : 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2054 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2055 /* 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
|
2056 unsigned two_byte_p : 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2057 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2058 /* 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
|
2059 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
|
2060 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
|
2061 unsigned font_not_found_p : 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2062 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2063 /* 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
|
2064 stipple pattern. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2065 unsigned stippled_p : 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2066 |
|
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2067 /* 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
|
2068 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
|
2069 string appears in as clip rect. */ |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2070 unsigned for_overlaps_p : 1; |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2071 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2072 /* 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
|
2073 GC gc; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2074 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2075 /* 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
|
2076 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
|
2077 font_not_found_p is 1. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2078 struct glyph *first_glyph; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2079 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2080 /* Image, if any. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2081 struct image *img; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2082 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2083 struct glyph_string *next, *prev; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2084 }; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2085 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2086 |
|
25716
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
2087 #if 0 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2088 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2089 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2090 x_dump_glyph_string (s) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2091 struct glyph_string *s; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2092 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2093 fprintf (stderr, "glyph string\n"); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2094 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
|
2095 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
|
2096 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
|
2097 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
|
2098 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
|
2099 s->left_overhang, s->right_overhang); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2100 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
|
2101 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
|
2102 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
|
2103 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
|
2104 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
|
2105 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2106 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2107 #endif /* GLYPH_DEBUG */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2108 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2109 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2110 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2111 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
|
2112 struct glyph_string **, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2113 struct glyph_string *, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2114 struct glyph_string *)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2115 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
|
2116 struct glyph_string **, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2117 struct glyph_string *, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2118 struct glyph_string *)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2119 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
|
2120 struct glyph_string **, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2121 struct glyph_string *)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2122 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
|
2123 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
|
2124 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
|
2125 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
|
2126 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
|
2127 int)); |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2128 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
|
2129 XChar2b *, struct window *, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2130 struct glyph_row *, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2131 enum glyph_row_area, int, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2132 enum draw_glyphs_face)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2133 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
|
2134 enum glyph_row_area, int, int, |
|
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2135 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
|
2136 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
|
2137 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
|
2138 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
|
2139 int)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2140 static void x_draw_glyph_string_foreground P_ ((struct glyph_string *)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2141 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
|
2142 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
|
2143 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
|
2144 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
|
2145 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
|
2146 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
|
2147 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
|
2148 int *, int *)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2149 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
|
2150 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
|
2151 unsigned long *, double, int)); |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2152 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
|
2153 double, int, unsigned long)); |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2154 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
|
2155 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
|
2156 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
|
2157 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
|
2158 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
|
2159 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
|
2160 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
|
2161 int, int, int)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2162 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
|
2163 int, int, int, int, XRectangle *)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2164 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
|
2165 int, int, int, XRectangle *)); |
|
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2166 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
|
2167 enum glyph_row_area)); |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2168 |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2169 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2170 /* 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
|
2171 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
|
2172 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2173 static INLINE void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2174 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
|
2175 struct glyph_string **head, **tail; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2176 struct glyph_string *h, *t; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2177 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2178 if (h) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2179 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2180 if (*head) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2181 (*tail)->next = h; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2182 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2183 *head = h; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2184 h->prev = *tail; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2185 *tail = t; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2186 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2187 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2188 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2189 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2190 /* 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
|
2191 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
|
2192 result. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2193 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2194 static INLINE void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2195 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
|
2196 struct glyph_string **head, **tail; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2197 struct glyph_string *h, *t; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2198 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2199 if (h) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2200 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2201 if (*head) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2202 (*head)->prev = t; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2203 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2204 *tail = t; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2205 t->next = *head; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2206 *head = h; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2207 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2208 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2209 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2210 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2211 /* 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
|
2212 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
|
2213 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2214 static INLINE void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2215 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
|
2216 struct glyph_string **head, **tail; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2217 struct glyph_string *s; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2218 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2219 s->next = s->prev = NULL; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2220 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
|
2221 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2222 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2223 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2224 /* 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
|
2225 face. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2226 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2227 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2228 x_set_cursor_gc (s) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2229 struct glyph_string *s; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2230 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2231 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
|
2232 && 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
|
2233 && s->face->foreground == FRAME_FOREGROUND_PIXEL (s->f) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2234 && !s->cmpcharp) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2235 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
|
2236 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2237 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2238 /* 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
|
2239 XGCValues xgcv; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2240 unsigned long mask; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2241 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2242 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
|
2243 xgcv.foreground = s->face->background; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2244 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2245 /* 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
|
2246 if (xgcv.foreground == xgcv.background) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2247 xgcv.foreground = s->face->foreground; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2248 if (xgcv.foreground == xgcv.background) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2249 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
|
2250 if (xgcv.foreground == xgcv.background) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2251 xgcv.foreground = s->face->foreground; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2252 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2253 /* 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
|
2254 if (xgcv.background == s->face->background |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2255 && xgcv.foreground == s->face->foreground) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2256 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2257 xgcv.background = s->face->foreground; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2258 xgcv.foreground = s->face->background; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2259 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2260 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2261 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
|
2262 xgcv.font = s->font->fid; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2263 xgcv.graphics_exposures = False; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2264 mask = GCForeground | GCBackground | GCFont | GCGraphicsExposures; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2265 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2266 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
|
2267 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
|
2268 mask, &xgcv); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2269 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2270 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
|
2271 = 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
|
2272 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2273 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
|
2274 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2275 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2276 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2277 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2278 /* 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
|
2279 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2280 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2281 x_set_mouse_face_gc (s) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2282 struct glyph_string *s; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2283 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2284 int face_id; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2285 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2286 /* 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
|
2287 face_id = FRAME_X_DISPLAY_INFO (s->f)->mouse_face_face_id; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2288 face_id = FACE_FOR_CHARSET (s->f, face_id, s->charset); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2289 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
|
2290 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
|
2291 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2292 /* 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
|
2293 if (s->font == s->face->font) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2294 s->gc = s->face->gc; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2295 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2296 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2297 /* 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
|
2298 but font FONT. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2299 XGCValues xgcv; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2300 unsigned long mask; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2301 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2302 xgcv.background = s->face->background; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2303 xgcv.foreground = s->face->foreground; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2304 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
|
2305 xgcv.font = s->font->fid; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2306 xgcv.graphics_exposures = False; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2307 mask = GCForeground | GCBackground | GCFont | GCGraphicsExposures; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2308 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2309 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
|
2310 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
|
2311 mask, &xgcv); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2312 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2313 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
|
2314 = 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
|
2315 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2316 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
|
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 xassert (s->gc != 0); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2320 } |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2323 /* 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
|
2324 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
|
2325 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
|
2326 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2327 static INLINE void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2328 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
|
2329 struct glyph_string *s; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2330 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2331 s->gc = s->face->gc; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2332 xassert (s->gc != 0); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2333 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2334 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2335 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2336 /* 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
|
2337 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
|
2338 pattern. */ |
|
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 static INLINE void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2341 x_set_glyph_string_gc (s) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2342 struct glyph_string *s; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2343 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2344 if (s->hl == DRAW_NORMAL_TEXT) |
|
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 s->gc = s->face->gc; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2347 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
|
2348 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2349 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
|
2350 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2351 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
|
2352 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
|
2353 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2354 else if (s->hl == DRAW_CURSOR) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2355 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2356 x_set_cursor_gc (s); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2357 s->stippled_p = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2358 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2359 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
|
2360 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2361 x_set_mouse_face_gc (s); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2362 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
|
2363 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2364 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
|
2365 || s->hl == DRAW_IMAGE_SUNKEN) |
|
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 s->gc = s->face->gc; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2368 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
|
2369 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2370 else |
|
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 s->gc = s->face->gc; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2373 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
|
2374 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2375 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2376 /* GC must have been set. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2377 xassert (s->gc != 0); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2378 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2379 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2380 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2381 /* 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
|
2382 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2383 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2384 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
|
2385 struct glyph_string *s; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2386 XRectangle *r; |
|
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 if (s->row->full_width_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2389 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2390 /* 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
|
2391 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
|
2392 |
|
3a09aae52441
(x_get_glyph_string_clip_rect): Take internal border
Gerd Moellmann <gerd@gnu.org>
parents:
25068
diff
changeset
|
2393 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
|
2394 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
|
2395 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2396 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
|
2397 { |
|
25079
3a09aae52441
(x_get_glyph_string_clip_rect): Take internal border
Gerd Moellmann <gerd@gnu.org>
parents:
25068
diff
changeset
|
2398 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
|
2399 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
|
2400 r->x -= width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2401 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2402 |
|
25083
d3b7d7d2bca8
(x_setup_relief_color): Don't try smart color allocation
Gerd Moellmann <gerd@gnu.org>
parents:
25079
diff
changeset
|
2403 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
|
2404 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2405 /* 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
|
2406 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
|
2407 if (s->w->pseudo_window_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2408 r->height = s->row->visible_height; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2409 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2410 r->height = s->height; |
|
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 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2413 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2414 /* 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
|
2415 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
|
2416 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
|
2417 r->height = s->row->visible_height; |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2420 /* 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
|
2421 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
|
2422 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
|
2423 if (!s->row->full_width_p |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2424 && MATRIX_ROW_PARTIALLY_VISIBLE_AT_TOP_P (s->w, s->row)) |
| 25546 | 2425 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
|
2426 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2427 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
|
2428 |
|
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
2429 /* 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
|
2430 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
|
2431 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
|
2432 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
|
2433 |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2434 /* 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
|
2435 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
|
2436 intentionally draws over other lines. */ |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2437 if (s->for_overlaps_p) |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2438 { |
| 25546 | 2439 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
|
2440 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
|
2441 } |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2442 |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2443 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
|
2444 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2445 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2446 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2447 /* 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
|
2448 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
|
2449 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2450 static INLINE void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2451 x_set_glyph_string_clipping (s) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2452 struct glyph_string *s; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2453 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2454 XRectangle r; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2455 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
|
2456 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
|
2457 } |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2460 /* Compute left and right overhang of glyph string S. If S is a glyph |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2461 string for a composite character, assume overhangs don't exist. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2462 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2463 static INLINE void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2464 x_compute_glyph_string_overhangs (s) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2465 struct glyph_string *s; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2466 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2467 if (s->cmpcharp == NULL |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2468 && s->first_glyph->type == CHAR_GLYPH) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2469 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2470 XCharStruct cs; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2471 int direction, font_ascent, font_descent; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2472 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
|
2473 &font_ascent, &font_descent, &cs); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2474 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
|
2475 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
|
2476 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2477 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2478 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2479 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2480 /* 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
|
2481 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
|
2482 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
|
2483 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2484 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2485 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
|
2486 struct glyph_string *s; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2487 int x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2488 int backward_p; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2489 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2490 if (backward_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2491 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2492 while (s) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2493 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2494 x_compute_glyph_string_overhangs (s); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2495 x -= s->width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2496 s->x = x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2497 s = s->prev; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2498 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2499 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2500 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2501 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2502 while (s) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2503 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2504 x_compute_glyph_string_overhangs (s); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2505 s->x = x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2506 x += s->width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2507 s = s->next; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2508 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2509 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2510 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2511 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2512 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2513 /* Set *LEFT and *RIGHT to the left and right overhang of GLYPH on |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2514 frame F. Overhangs of glyphs other than type CHAR_GLYPH or of |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2515 character glyphs for composite characters are assumed to be zero. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2516 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2517 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2518 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
|
2519 struct glyph *glyph; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2520 struct frame *f; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2521 int *left, *right; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2522 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2523 int c; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2524 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2525 *left = *right = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2526 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2527 if (glyph->type == CHAR_GLYPH |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2528 && (c = glyph->u.ch.code, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2529 CHAR_CHARSET (c) != CHARSET_COMPOSITION)) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2530 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2531 XFontStruct *font; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2532 struct face *face; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2533 struct font_info *font_info; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2534 XChar2b char2b; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2535 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2536 face = x_get_glyph_face_and_encoding (f, glyph, &char2b); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2537 font = face->font; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2538 font_info = FONT_INFO_FROM_ID (f, face->font_info_id); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2539 if (font) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2540 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2541 XCharStruct *pcm = x_per_char_metric (font, &char2b); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2542 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2543 if (pcm->rbearing > pcm->width) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2544 *right = pcm->rbearing - pcm->width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2545 if (pcm->lbearing < 0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2546 *left = -pcm->lbearing; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2547 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2548 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2549 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2550 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2551 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2552 /* 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
|
2553 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
|
2554 if no glyphs are overwritten. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2555 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2556 static int |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2557 x_left_overwritten (s) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2558 struct glyph_string *s; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2559 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2560 int k; |
|
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 (s->left_overhang) |
|
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 int x = 0, i; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2565 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
|
2566 int first = s->first_glyph - glyphs; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2567 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2568 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
|
2569 x -= glyphs[i].pixel_width; |
|
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 k = i + 1; |
|
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 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2574 k = -1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2575 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2576 return k; |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2579 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2580 /* 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
|
2581 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
|
2582 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
|
2583 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2584 static int |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2585 x_left_overwriting (s) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2586 struct glyph_string *s; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2587 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2588 int i, k, x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2589 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
|
2590 int first = s->first_glyph - glyphs; |
|
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 k = -1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2593 x = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2594 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
|
2595 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2596 int left, right; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2597 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
|
2598 if (x + right > 0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2599 k = i; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2600 x -= glyphs[i].pixel_width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2601 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2602 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2603 return k; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2604 } |
|
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 /* 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
|
2608 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
|
2609 no such glyph is found. */ |
|
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 int |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2612 x_right_overwritten (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 int k = -1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2616 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2617 if (s->right_overhang) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2618 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2619 int x = 0, i; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2620 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
|
2621 int first = (s->first_glyph - glyphs) + (s->cmpcharp ? 1 : s->nchars); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2622 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
|
2623 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2624 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
|
2625 x += glyphs[i].pixel_width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2626 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2627 k = i; |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2630 return k; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2631 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2632 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2633 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2634 /* 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
|
2635 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
|
2636 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
|
2637 |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
2638 static int |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2639 x_right_overwriting (s) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2640 struct glyph_string *s; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2641 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2642 int i, k, x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2643 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
|
2644 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
|
2645 int first = (s->first_glyph - glyphs) + (s->cmpcharp ? 1 : s->nchars); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2646 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2647 k = -1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2648 x = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2649 for (i = first; i < end; ++i) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2650 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2651 int left, right; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2652 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
|
2653 if (x - left < 0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2654 k = i; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2655 x += glyphs[i].pixel_width; |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2658 return k; |
|
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 /* 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
|
2663 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2664 static INLINE void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2665 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
|
2666 struct glyph_string *s; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2667 int x, y, w, h; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2668 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2669 XGCValues xgcv; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2670 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
|
2671 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
|
2672 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
|
2673 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
|
2674 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2675 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2676 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2677 /* 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
|
2678 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
|
2679 background even if it wouldn't be drawn normally. This is used |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2680 when a string preceding S draws into the background of S. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2681 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2682 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2683 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
|
2684 struct glyph_string *s; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2685 int force_p; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2686 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2687 /* 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
|
2688 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
|
2689 if (!s->background_filled_p) |
|
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 if (s->cmpcharp |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2692 && s->gidx > 0 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2693 && !s->font_not_found_p |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2694 && !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
|
2695 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2696 /* Don't draw background for glyphs of a composite |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2697 characters, except for the first one. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2698 s->background_filled_p = 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2699 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2700 else if (s->stippled_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2701 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2702 /* Fill background with a stipple pattern. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2703 XSetFillStyle (s->display, s->gc, FillOpaqueStippled); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2704 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
|
2705 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
|
2706 s->background_width, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2707 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
|
2708 XSetFillStyle (s->display, s->gc, FillSolid); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2709 s->background_filled_p = 1; |
|
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 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
|
2712 || s->font_not_found_p |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2713 || 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
|
2714 || s->cmpcharp |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2715 || force_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2716 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2717 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
|
2718 s->background_width, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2719 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
|
2720 s->background_filled_p = 1; |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2725 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2726 /* 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
|
2727 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2728 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2729 x_draw_glyph_string_foreground (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 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2732 int i, x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2733 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2734 /* 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
|
2735 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
|
2736 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
|
2737 && 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
|
2738 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
|
2739 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2740 x = s->x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2741 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2742 if (s->cmpcharp == NULL) |
|
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 /* Not a composite character. Draw characters of S as |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2745 rectangles if S's font could not be loaded. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2746 if (s->font_not_found_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2747 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2748 for (i = 0; i < s->nchars; ++i) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2749 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2750 struct glyph *g = s->first_glyph + i; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2751 XDrawRectangle (s->display, s->window, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2752 s->gc, x, s->y, g->pixel_width - 1, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2753 s->height - 1); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2754 x += g->pixel_width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2755 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2756 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2757 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2758 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2759 char *char1b = (char *) s->char2b; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2760 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2761 /* If we can use 8-bit functions, condense S->char2b. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2762 if (!s->two_byte_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2763 for (i = 0; i < s->nchars; ++i) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2764 char1b[i] = s->char2b[i].byte2; |
|
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 /* Draw text with XDrawString if background has already been |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2767 filled. Otherwise, use XDrawImageString. (Note that |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2768 XDrawImageString is usually faster than XDrawString.) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2769 Always use XDrawImageString when drawing the cursor so |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2770 that there is no chance that characters under a box |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2771 cursor are invisible. */ |
|
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2772 if (s->for_overlaps_p |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
2773 || (s->background_filled_p && s->hl != DRAW_CURSOR)) |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2774 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2775 /* Draw characters with 16-bit or 8-bit functions. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2776 if (s->two_byte_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2777 XDrawString16 (s->display, s->window, s->gc, x, s->ybase, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2778 s->char2b, s->nchars); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2779 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2780 XDrawString (s->display, s->window, s->gc, x, s->ybase, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2781 char1b, s->nchars); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2782 } |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
2783 else |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2784 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2785 if (s->two_byte_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2786 XDrawImageString16 (s->display, s->window, s->gc, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2787 x, s->ybase, s->char2b, s->nchars); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2788 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2789 XDrawImageString (s->display, s->window, s->gc, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2790 x, s->ybase, char1b, s->nchars); |
|
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 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2793 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2794 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2795 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2796 /* S is a glyph string for a composite character. S->gidx is the |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2797 index of the first character drawn in the vector |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2798 S->cmpcharp->glyph. S->gidx == 0 means we are drawing the |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2799 very first component character of a composite char. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2800 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2801 /* Draw a single rectangle for the composite character if S's |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2802 font could not be loaded. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2803 if (s->font_not_found_p && s->gidx == 0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2804 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
|
2805 s->width - 1, s->height - 1); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2806 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2807 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2808 XCharStruct *pcm; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2809 int relative_compose, default_ascent, i; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2810 int highest = 0, lowest = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2811 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2812 /* The value of font_info my be null if we couldn't find it |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2813 in x_get_char_face_and_encoding. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2814 if (s->cmpcharp->cmp_rule == NULL && s->font_info) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2815 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2816 relative_compose = s->font_info->relative_compose; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2817 default_ascent = s->font_info->default_ascent; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2818 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2819 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2820 relative_compose = default_ascent = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2821 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2822 if ((s->cmpcharp->cmp_rule || relative_compose) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2823 && s->gidx == 0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2824 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2825 /* This is the first character. Initialize variables. |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2826 Highest is the highest position of glyphs ever |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2827 written, lowest the lowest position. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2828 int x_offset = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2829 int first_ch = s->first_glyph->u.ch.code; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2830 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2831 if (default_ascent |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2832 && CHAR_TABLE_P (Vuse_default_ascent) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2833 && !NILP (Faref (Vuse_default_ascent, first_ch))) |
|
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 highest = default_ascent; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2836 lowest = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2837 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2838 else |
|
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 pcm = PER_CHAR_METRIC (s->font, s->char2b); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2841 highest = pcm->ascent + 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2842 lowest = - pcm->descent; |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2845 if (s->cmpcharp->cmp_rule) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2846 x_offset = (s->cmpcharp->col_offset[0] |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2847 * FONT_WIDTH (s->f->output_data.x->font)); |
|
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 /* Draw the first character at the normal position. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2850 XDrawString16 (s->display, s->window, s->gc, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2851 x + x_offset, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2852 s->ybase, s->char2b, 1); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2853 i = 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2854 ++s->gidx; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2855 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2856 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2857 i = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2858 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2859 for (; i < s->nchars; i++, ++s->gidx) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2860 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2861 int x_offset = 0, y_offset = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2862 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2863 if (relative_compose) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2864 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2865 pcm = PER_CHAR_METRIC (s->font, s->char2b + i); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2866 if (NILP (Vignore_relative_composition) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2867 || NILP (Faref (Vignore_relative_composition, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2868 make_number (s->cmpcharp->glyph[s->gidx])))) |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
2869 { |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2870 if (- pcm->descent >= relative_compose) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2871 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2872 /* Draw above the current glyphs. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2873 y_offset = highest + pcm->descent; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2874 highest += pcm->ascent + pcm->descent; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2875 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2876 else if (pcm->ascent <= 0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2877 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2878 /* Draw beneath the current glyphs. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2879 y_offset = lowest - pcm->ascent; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2880 lowest -= pcm->ascent + pcm->descent; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2881 } |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
2882 } |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2883 else |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
2884 { |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2885 /* Draw the glyph at normal position. If |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2886 it sticks out of HIGHEST or LOWEST, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2887 update them appropriately. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2888 if (pcm->ascent > highest) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2889 highest = pcm->ascent; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2890 else if (- pcm->descent < lowest) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2891 lowest = - pcm->descent; |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
2892 } |
|
24991
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 else if (s->cmpcharp->cmp_rule) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2895 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2896 int gref = (s->cmpcharp->cmp_rule[s->gidx] - 0xA0) / 9; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2897 int nref = (s->cmpcharp->cmp_rule[s->gidx] - 0xA0) % 9; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2898 int bottom, top; |
|
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 /* Re-encode GREF and NREF so that they specify |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2901 only Y-axis information: |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2902 0:top, 1:base, 2:bottom, 3:center */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2903 gref = gref / 3 + (gref == 4) * 2; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2904 nref = nref / 3 + (nref == 4) * 2; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2905 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2906 pcm = PER_CHAR_METRIC (s->font, s->char2b + i); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2907 bottom = ((gref == 0 ? highest : gref == 1 ? 0 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2908 : gref == 2 ? lowest |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2909 : (highest + lowest) / 2) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2910 - (nref == 0 ? pcm->ascent + pcm->descent |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2911 : nref == 1 ? pcm->descent : nref == 2 ? 0 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2912 : (pcm->ascent + pcm->descent) / 2)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2913 top = bottom + (pcm->ascent + pcm->descent); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2914 if (top > highest) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2915 highest = top; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2916 if (bottom < lowest) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2917 lowest = bottom; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2918 y_offset = bottom + pcm->descent; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2919 x_offset = (s->cmpcharp->col_offset[s->gidx] |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2920 * FONT_WIDTH (FRAME_FONT (s->f))); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2921 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2922 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2923 XDrawString16 (s->display, s->window, s->gc, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2924 x + x_offset, s->ybase - y_offset, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2925 s->char2b + i, 1); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2926 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2927 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2928 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2929 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2930 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2931 |
|
25529
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2932 #ifdef USE_X_TOOLKIT |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2933 |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2934 /* Allocate the color COLOR->pixel on the screen and display of |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2935 widget WIDGET in colormap CMAP. If an exact match cannot be |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2936 allocated, try the nearest color available. Value is non-zero |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2937 if successful. This is called from lwlib. */ |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2938 |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2939 int |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2940 x_alloc_nearest_color_for_widget (widget, cmap, color) |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2941 Widget widget; |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2942 Colormap cmap; |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2943 XColor *color; |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2944 { |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2945 struct frame *f; |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2946 struct x_display_info *dpyinfo; |
|
25716
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
2947 Lisp_Object tail; |
|
25529
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2948 |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2949 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
|
2950 |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2951 /* 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
|
2952 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
|
2953 (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
|
2954 x_any_window_to_frame. */ |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2955 while (!XtIsTopLevelShell (widget)) |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2956 widget = XtParent (widget); |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2957 |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2958 /* 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
|
2959 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
|
2960 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
|
2961 if (GC_FRAMEP (XCAR (tail)) |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2962 && (f = XFRAME (XCAR (tail)), |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2963 (f->output_data.nothing != 1 |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2964 && FRAME_X_DISPLAY_INFO (f) == dpyinfo)) |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2965 && f->output_data.x->widget == widget) |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2966 return x_alloc_nearest_color (f, cmap, color); |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2967 |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2968 abort (); |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2969 } |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2970 |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2971 #endif /* USE_X_TOOLKIT */ |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2972 |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2973 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2974 /* 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
|
2975 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
|
2976 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
|
2977 color allocated. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2978 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2979 int |
|
25529
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2980 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
|
2981 struct frame *f; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2982 Colormap cmap; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2983 XColor *color; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2984 { |
|
25529
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2985 Display *display = FRAME_X_DISPLAY (f); |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2986 Screen *screen = FRAME_X_SCREEN (f); |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2987 int rc; |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2988 |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2989 gamma_correct (f, color); |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
2990 rc = XAllocColor (display, cmap, color); |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2991 if (rc == 0) |
|
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 /* 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
|
2994 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
|
2995 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
|
2996 color matching with StaticColor visuals. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2997 int nearest, i; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2998 unsigned long nearest_delta = ~0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
2999 int ncells = XDisplayCells (display, XScreenNumberOfScreen (screen)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3000 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
|
3001 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3002 for (i = 0; i < ncells; ++i) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3003 cells[i].pixel = i; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3004 XQueryColors (display, cmap, cells, ncells); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3005 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3006 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
|
3007 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3008 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
|
3009 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
|
3010 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
|
3011 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
|
3012 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3013 if (delta < nearest_delta) |
|
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 nearest = i; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3016 nearest_delta = delta; |
|
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 color->red = cells[nearest].red; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3021 color->green = cells[nearest].green; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3022 color->blue = cells[nearest].blue; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3023 rc = XAllocColor (display, cmap, color); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3024 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3025 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3026 return rc; |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3029 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3030 /* 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
|
3031 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
|
3032 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
|
3033 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
|
3034 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
|
3035 Value is non-zero if successful. */ |
|
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 static int |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3038 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
|
3039 struct frame *f; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3040 Display *display; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3041 Colormap cmap; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3042 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
|
3043 double factor; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3044 int delta; |
|
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 XColor color, new; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3047 int success_p; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3048 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3049 /* Get RGB color values. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3050 color.pixel = *pixel; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3051 XQueryColor (display, cmap, &color); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3052 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3053 /* 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
|
3054 xassert (factor >= 0); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3055 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
|
3056 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
|
3057 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
|
3058 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3059 /* Try to allocate the color. */ |
|
25529
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
3060 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
|
3061 if (success_p) |
|
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 if (new.pixel == *pixel) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3064 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3065 /* 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
|
3066 delta to the RGB values. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3067 int class = FRAME_X_DISPLAY_INFO (f)->visual->class; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3068 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3069 /* If display has an immutable color map, freeing colors is |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3070 not necessary and some servers don't allow it. So don't |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3071 do it. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3072 if (class != StaticColor |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3073 && class != StaticGray |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3074 && class != TrueColor) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3075 XFreeColors (display, cmap, &new.pixel, 1, 0); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3076 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3077 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
|
3078 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
|
3079 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
|
3080 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
|
3081 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3082 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3083 success_p = 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3084 *pixel = new.pixel; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3085 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3086 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3087 return success_p; |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3090 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3091 /* 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
|
3092 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
|
3093 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
|
3094 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
|
3095 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
|
3096 be allocated, use DEFAULT_PIXEL, instead. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3097 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3098 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3099 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
|
3100 struct frame *f; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3101 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
|
3102 double factor; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3103 int delta; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3104 unsigned long default_pixel; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3105 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3106 XGCValues xgcv; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3107 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
|
3108 unsigned long mask = GCForeground | GCLineWidth | GCGraphicsExposures; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3109 unsigned long pixel; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3110 unsigned long background = di->relief_background; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3111 Colormap cmap = DefaultColormapOfScreen (FRAME_X_SCREEN (f)); |
|
25091
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
3112 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
|
3113 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
|
3114 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3115 xgcv.graphics_exposures = False; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3116 xgcv.line_width = 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3117 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3118 /* 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
|
3119 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
|
3120 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
|
3121 if (relief->gc |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3122 && relief->allocated_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3123 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3124 /* If display has an immutable color map, freeing colors is not |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3125 necessary and some servers don't allow it. So don't do it. */ |
|
25091
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
3126 int class = dpyinfo->visual->class; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3127 if (class != StaticColor |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3128 && class != StaticGray |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3129 && class != TrueColor) |
|
25091
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
3130 XFreeColors (dpy, cmap, &relief->pixel, 1, 0); |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3131 relief->allocated_p = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3132 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3133 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3134 /* Allocate new color. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3135 xgcv.foreground = default_pixel; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3136 pixel = background; |
|
25091
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
3137 if (dpyinfo->n_planes != 1 |
|
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
3138 && 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
|
3139 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3140 relief->allocated_p = 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3141 xgcv.foreground = relief->pixel = pixel; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3142 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3143 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3144 if (relief->gc == 0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3145 { |
|
25091
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
3146 xgcv.stipple = dpyinfo->gray; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3147 mask |= GCStipple; |
|
25091
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
3148 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
|
3149 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3150 else |
|
25091
c3dc74005d22
(x_set_toolkit_scroll_bar_thumb): Don't call
Gerd Moellmann <gerd@gnu.org>
parents:
25085
diff
changeset
|
3151 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
|
3152 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3153 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3154 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3155 /* 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
|
3156 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3157 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3158 x_setup_relief_colors (s) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3159 struct glyph_string *s; |
|
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 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
|
3162 unsigned long color; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3163 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3164 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
|
3165 color = s->face->box_color; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3166 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3167 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3168 XGCValues xgcv; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3169 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3170 /* 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
|
3171 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
|
3172 color = xgcv.background; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3173 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3174 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3175 if (di->white_relief.gc == 0 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3176 || color != di->relief_background) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3177 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3178 di->relief_background = color; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3179 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
|
3180 WHITE_PIX_DEFAULT (s->f)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3181 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
|
3182 BLACK_PIX_DEFAULT (s->f)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3183 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3184 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3185 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3186 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3187 /* 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
|
3188 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
|
3189 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
|
3190 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
|
3191 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
|
3192 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
|
3193 when drawing. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3194 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3195 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3196 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
|
3197 raised_p, left_p, right_p, clip_rect) |
| 771 | 3198 struct frame *f; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3199 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
|
3200 XRectangle *clip_rect; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3201 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3202 int i; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3203 GC gc; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3204 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3205 if (raised_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3206 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
|
3207 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3208 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
|
3209 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
|
3210 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3211 /* Top. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3212 for (i = 0; i < width; ++i) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3213 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
|
3214 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
|
3215 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
|
3216 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3217 /* Left. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3218 if (left_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3219 for (i = 0; i < width; ++i) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3220 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
|
3221 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
|
3222 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3223 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
|
3224 if (raised_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3225 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
|
3226 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3227 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
|
3228 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
|
3229 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3230 /* Bottom. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3231 for (i = 0; i < width; ++i) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3232 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
|
3233 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
|
3234 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
|
3235 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3236 /* Right. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3237 if (right_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3238 for (i = 0; i < width; ++i) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3239 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
|
3240 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
|
3241 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3242 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
|
3243 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3244 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3245 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3246 /* 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
|
3247 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
|
3248 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
|
3249 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
|
3250 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
|
3251 rectangle to use when drawing. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3252 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3253 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3254 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
|
3255 left_p, right_p, clip_rect) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3256 struct glyph_string *s; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3257 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
|
3258 XRectangle *clip_rect; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3259 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3260 XGCValues xgcv; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3261 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3262 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
|
3263 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
|
3264 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
|
3265 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3266 /* Top. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3267 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
|
3268 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
|
3269 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3270 /* Left. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3271 if (left_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3272 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
|
3273 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
|
3274 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3275 /* Bottom. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3276 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
|
3277 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
|
3278 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3279 /* Right. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3280 if (right_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3281 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
|
3282 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
|
3283 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3284 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
|
3285 XSetClipMask (s->display, s->gc, None); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3286 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3287 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3288 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3289 /* 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
|
3290 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3291 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3292 x_draw_glyph_string_box (s) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3293 struct glyph_string *s; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3294 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3295 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
|
3296 int left_p, right_p; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3297 struct glyph *last_glyph; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3298 XRectangle clip_rect; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3299 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3300 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
|
3301 if (s->row->full_width_p |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3302 && !s->w->pseudo_window_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3303 { |
| 25465 | 3304 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
|
3305 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
|
3306 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
|
3307 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3308 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3309 /* The glyph that may have a right box line. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3310 last_glyph = (s->cmpcharp || s->img |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3311 ? s->first_glyph |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3312 : s->first_glyph + s->nchars - 1); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3313 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3314 width = s->face->box_line_width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3315 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
|
3316 left_x = s->x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3317 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
|
3318 ? last_x - 1 |
|
25302
0f10c1eaf8fb
(x_draw_glyph_string_box): Use the background width
Gerd Moellmann <gerd@gnu.org>
parents:
25269
diff
changeset
|
3319 : 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
|
3320 top_y = s->y; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3321 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
|
3322 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3323 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
|
3324 || (s->hl == DRAW_MOUSE_FACE |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3325 && (s->prev == NULL |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3326 || s->prev->hl != s->hl))); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3327 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
|
3328 || (s->hl == DRAW_MOUSE_FACE |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3329 && (s->next == NULL |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3330 || s->next->hl != s->hl))); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3331 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3332 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
|
3333 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3334 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
|
3335 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
|
3336 left_p, right_p, &clip_rect); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3337 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3338 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3339 x_setup_relief_colors (s); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3340 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
|
3341 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
|
3342 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3343 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3344 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3345 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3346 /* 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
|
3347 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3348 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3349 x_draw_image_foreground (s) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3350 struct glyph_string *s; |
|
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 int x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3353 int y = s->ybase - IMAGE_ASCENT (s->img); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3354 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3355 /* 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
|
3356 right of that line. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3357 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
|
3358 && 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
|
3359 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
|
3360 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3361 x = s->x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3362 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3363 /* 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
|
3364 by that margin. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3365 if (s->img->margin) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3366 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3367 x += s->img->margin; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3368 y += s->img->margin; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3369 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3370 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3371 if (s->img->pixmap) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3372 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3373 if (s->img->mask) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3374 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3375 /* 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
|
3376 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
|
3377 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
|
3378 (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
|
3379 manually. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3380 unsigned long mask = (GCClipMask | GCClipXOrigin | GCClipYOrigin |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3381 | GCFunction); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3382 XGCValues xgcv; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3383 XRectangle clip_rect, image_rect, r; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3384 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3385 xgcv.clip_mask = s->img->mask; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3386 xgcv.clip_x_origin = x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3387 xgcv.clip_y_origin = y; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3388 xgcv.function = GXcopy; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3389 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
|
3390 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3391 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
|
3392 image_rect.x = x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3393 image_rect.y = y; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3394 image_rect.width = s->img->width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3395 image_rect.height = s->img->height; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3396 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
|
3397 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
|
3398 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
|
3399 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3400 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3401 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3402 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
|
3403 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
|
3404 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3405 /* 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
|
3406 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
|
3407 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
|
3408 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
|
3409 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
|
3410 nothing here for mouse-face. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3411 if (s->hl == DRAW_CURSOR) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3412 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
|
3413 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
|
3414 } |
|
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 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3417 /* 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
|
3418 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
|
3419 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
|
3420 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3421 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3422 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3423 /* 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
|
3424 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3425 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3426 x_draw_image_relief (s) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3427 struct glyph_string *s; |
|
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 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
|
3430 XRectangle r; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3431 int x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3432 int y = s->ybase - IMAGE_ASCENT (s->img); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3433 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3434 /* 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
|
3435 right of that line. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3436 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
|
3437 && 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
|
3438 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
|
3439 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3440 x = s->x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3441 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3442 /* 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
|
3443 by that margin. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3444 if (s->img->margin) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3445 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3446 x += s->img->margin; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3447 y += s->img->margin; |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3450 if (s->hl == DRAW_IMAGE_SUNKEN |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3451 || s->hl == DRAW_IMAGE_RAISED) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3452 { |
|
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
3453 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
|
3454 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
|
3455 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3456 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3457 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3458 thick = abs (s->img->relief); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3459 raised_p = s->img->relief > 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3460 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3461 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3462 x0 = x - thick; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3463 y0 = y - thick; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3464 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
|
3465 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
|
3466 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3467 x_setup_relief_colors (s); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3468 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
|
3469 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
|
3470 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3471 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3472 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3473 /* 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
|
3474 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3475 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3476 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
|
3477 struct glyph_string *s; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3478 Pixmap pixmap; |
|
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 int x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3481 int y = s->ybase - s->y - IMAGE_ASCENT (s->img); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3482 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3483 /* 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
|
3484 right of that line. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3485 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
|
3486 && 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
|
3487 x = s->face->box_line_width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3488 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3489 x = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3490 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3491 /* 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
|
3492 by that margin. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3493 if (s->img->margin) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3494 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3495 x += s->img->margin; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3496 y += s->img->margin; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3497 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3498 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3499 if (s->img->pixmap) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3500 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3501 if (s->img->mask) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3502 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3503 /* 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
|
3504 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
|
3505 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
|
3506 (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
|
3507 manually. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3508 unsigned long mask = (GCClipMask | GCClipXOrigin | GCClipYOrigin |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3509 | GCFunction); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3510 XGCValues xgcv; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3511 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3512 xgcv.clip_mask = s->img->mask; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3513 xgcv.clip_x_origin = x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3514 xgcv.clip_y_origin = y; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3515 xgcv.function = GXcopy; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3516 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
|
3517 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3518 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
|
3519 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
|
3520 XSetClipMask (s->display, s->gc, None); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3521 } |
|
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 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
|
3525 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
|
3526 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3527 /* 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
|
3528 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
|
3529 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
|
3530 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
|
3531 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
|
3532 nothing here for mouse-face. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3533 if (s->hl == DRAW_CURSOR) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3534 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
|
3535 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
|
3536 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3537 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3538 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3539 /* 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
|
3540 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
|
3541 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
|
3542 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3543 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3544 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3545 /* 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
|
3546 give the rectangle to draw. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3547 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3548 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3549 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
|
3550 struct glyph_string *s; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3551 int x, y, w, h; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3552 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3553 if (s->stippled_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3554 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3555 /* Fill background with a stipple pattern. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3556 XSetFillStyle (s->display, s->gc, FillOpaqueStippled); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3557 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
|
3558 XSetFillStyle (s->display, s->gc, FillSolid); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3559 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3560 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3561 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
|
3562 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3563 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3564 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3565 /* Draw image glyph string S. |
|
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 s->y |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3568 s->x +------------------------- |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3569 | s->face->box |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3570 | |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3571 | +------------------------- |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3572 | | s->img->margin |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3573 | | |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3574 | | +------------------- |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3575 | | | the image |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3576 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3577 */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3578 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3579 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3580 x_draw_image_glyph_string (s) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3581 struct glyph_string *s; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3582 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3583 int x, y; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3584 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
|
3585 int margin = s->img->margin; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3586 int height; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3587 Pixmap pixmap = None; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3588 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3589 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
|
3590 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3591 /* 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
|
3592 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
|
3593 flickering. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3594 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
|
3595 if (height > s->img->height |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3596 || margin |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3597 || s->img->mask |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3598 || s->img->pixmap == 0 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3599 || s->width != s->background_width) |
|
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 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
|
3602 x = s->x + box_line_width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3603 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3604 x = s->x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3605 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3606 y = s->y + box_line_width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3607 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3608 if (s->img->mask) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3609 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3610 /* Create a pixmap as large as the glyph string Fill it with |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3611 the background color. Copy the image to it, using its |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3612 mask. Copy the temporary pixmap to the display. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3613 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
|
3614 int depth = DefaultDepthOfScreen (screen); |
|
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 /* 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
|
3617 pixmap = XCreatePixmap (s->display, s->window, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3618 s->background_width, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3619 s->height, depth); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3620 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3621 /* 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
|
3622 pixmap. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3623 XSetClipMask (s->display, s->gc, None); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3624 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3625 /* 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
|
3626 if (s->stippled_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3627 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3628 /* Fill background with a stipple pattern. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3629 XSetFillStyle (s->display, s->gc, FillOpaqueStippled); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3630 XFillRectangle (s->display, pixmap, s->gc, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3631 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
|
3632 XSetFillStyle (s->display, s->gc, FillSolid); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3633 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3634 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3635 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3636 XGCValues xgcv; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3637 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
|
3638 &xgcv); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3639 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
|
3640 XFillRectangle (s->display, pixmap, s->gc, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3641 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
|
3642 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
|
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 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3646 /* Implementation idea: Is it possible to construct a mask? |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3647 We could look at the color at the margins of the image, and |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3648 say that this color is probably the background color of the |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3649 image. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3650 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
|
3651 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3652 s->background_filled_p = 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3653 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3654 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3655 /* Draw the foreground. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3656 if (pixmap != None) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3657 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3658 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
|
3659 x_set_glyph_string_clipping (s); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3660 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
|
3661 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
|
3662 XFreePixmap (s->display, pixmap); |
|
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 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3665 x_draw_image_foreground (s); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3666 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3667 /* 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
|
3668 if (s->img->relief |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3669 || s->hl == DRAW_IMAGE_RAISED |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3670 || s->hl == DRAW_IMAGE_SUNKEN) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3671 x_draw_image_relief (s); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3672 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3673 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3674 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3675 /* Draw stretch glyph string S. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3676 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3677 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3678 x_draw_stretch_glyph_string (s) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3679 struct glyph_string *s; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3680 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3681 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
|
3682 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
|
3683 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3684 if (s->hl == DRAW_CURSOR |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3685 && !x_stretch_cursor_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3686 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3687 /* 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
|
3688 as wide as the stretch glyph. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3689 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
|
3690 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3691 /* Draw cursor. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3692 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
|
3693 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3694 /* 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
|
3695 if (width < s->background_width) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3696 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3697 GC gc = s->face->gc; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3698 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
|
3699 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
|
3700 XRectangle r; |
|
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 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
|
3703 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
|
3704 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3705 if (s->face->stipple) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3706 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3707 /* Fill background with a stipple pattern. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3708 XSetFillStyle (s->display, gc, FillOpaqueStippled); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3709 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
|
3710 XSetFillStyle (s->display, gc, FillSolid); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3711 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3712 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3713 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3714 XGCValues xgcv; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3715 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
|
3716 XSetForeground (s->display, gc, xgcv.background); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3717 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
|
3718 XSetForeground (s->display, gc, xgcv.foreground); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3719 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3720 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3721 } |
| 313 | 3722 else |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3723 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
|
3724 s->height); |
|
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 s->background_filled_p = 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3727 } |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3730 /* Draw glyph string S. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3731 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3732 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3733 x_draw_glyph_string (s) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3734 struct glyph_string *s; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3735 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3736 /* 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
|
3737 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
|
3738 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
|
3739 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
|
3740 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3741 xassert (s->next->img == NULL); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3742 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
|
3743 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
|
3744 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
|
3745 } |
|
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 /* 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
|
3748 x_set_glyph_string_gc (s); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3749 x_set_glyph_string_clipping (s); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3750 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3751 switch (s->first_glyph->type) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3752 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3753 case IMAGE_GLYPH: |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3754 x_draw_image_glyph_string (s); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3755 break; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3756 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3757 case STRETCH_GLYPH: |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3758 x_draw_stretch_glyph_string (s); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3759 break; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3760 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3761 case CHAR_GLYPH: |
|
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3762 if (s->for_overlaps_p) |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3763 s->background_filled_p = 1; |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3764 else |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3765 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
|
3766 x_draw_glyph_string_foreground (s); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3767 break; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3768 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3769 default: |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3770 abort (); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3771 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3772 |
|
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3773 if (!s->for_overlaps_p) |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3774 { |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3775 /* Draw underline. */ |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3776 if (s->face->underline_p) |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3777 { |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3778 unsigned long dy, h; |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3779 |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3780 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
|
3781 h = 1; |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3782 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
|
3783 dy = s->height - h; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3784 |
|
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3785 if (s->face->underline_defaulted_p) |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3786 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
|
3787 s->width, h); |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3788 else |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3789 { |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3790 XGCValues xgcv; |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3791 XGetGCValues (s->display, s->gc, GCForeground, &xgcv); |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3792 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
|
3793 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
|
3794 s->width, h); |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3795 XSetForeground (s->display, s->gc, xgcv.foreground); |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3796 } |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3797 } |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3798 |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3799 /* Draw overline. */ |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3800 if (s->face->overline_p) |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3801 { |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3802 unsigned long dy = 0, h = 1; |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3803 |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3804 if (s->face->overline_color_defaulted_p) |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3805 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
|
3806 s->width, h); |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3807 else |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3808 { |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3809 XGCValues xgcv; |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3810 XGetGCValues (s->display, s->gc, GCForeground, &xgcv); |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3811 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
|
3812 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
|
3813 s->width, h); |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3814 XSetForeground (s->display, s->gc, xgcv.foreground); |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3815 } |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3816 } |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3817 |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3818 /* Draw strike-through. */ |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3819 if (s->face->strike_through_p) |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3820 { |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3821 unsigned long h = 1; |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3822 unsigned long dy = (s->height - h) / 2; |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3823 |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3824 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
|
3825 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
|
3826 s->width, h); |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3827 else |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3828 { |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3829 XGCValues xgcv; |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3830 XGetGCValues (s->display, s->gc, GCForeground, &xgcv); |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3831 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
|
3832 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
|
3833 s->width, h); |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3834 XSetForeground (s->display, s->gc, xgcv.foreground); |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3835 } |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3836 } |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3837 |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3838 /* Draw relief. */ |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3839 if (s->face->box != FACE_NO_BOX) |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3840 x_draw_glyph_string_box (s); |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3841 } |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3842 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3843 /* Reset clipping. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3844 XSetClipMask (s->display, s->gc, None); |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3847 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3848 /* A work-list entry used during the construction of glyph_string |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3849 structures for a composite character. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3850 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3851 struct work |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3852 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3853 /* Pointer to composite char info defining has the composite |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3854 character is drawn. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3855 struct cmpchar_info *cmpcharp; |
|
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 /* Start index in compcharp->glyph[]. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3858 int gidx; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3859 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3860 /* Next in stack. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3861 struct work *next; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3862 }; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3863 |
|
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 static void x_fill_composite_glyph_string P_ ((struct glyph_string *, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3866 int, struct work **, |
|
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3867 struct work **, int)); |
|
24991
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3870 /* Load glyph string S with information from the top of *STACK for a |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3871 composite character. FACE_ID is the id of the face in which S is |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3872 drawn. *NEW is a pointer to a struct work not on the stack, that |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3873 can be used if this function needs to push a new structure on the |
|
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3874 stack. If it uses it, *NEW is set to null. OVERLAPS_P non-zero |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3875 means S should draw the foreground only, and use its lines physical |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3876 height for clipping. */ |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3877 |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3878 static void |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3879 x_fill_composite_glyph_string (s, face_id, stack, new, overlaps_p) |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3880 struct glyph_string *s; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3881 int face_id; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3882 struct work **stack, **new; |
|
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3883 int overlaps_p; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3884 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3885 int i, c; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3886 struct work *work; |
|
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 xassert (s && *new && *stack); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3889 |
|
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3890 s->for_overlaps_p = 1; |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3891 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3892 /* Pop the work stack. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3893 work = *stack; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3894 *stack = work->next; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3895 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3896 /* For all glyphs of cmpcharp->glyph, starting at the offset |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3897 work->offset, until we reach the end of the definition or |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3898 encounter another composite char, get the font and face to use, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3899 and add it to S. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3900 for (i = work->gidx; i < work->cmpcharp->glyph_len; ++i) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3901 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3902 c = FAST_GLYPH_CHAR (work->cmpcharp->glyph[i]); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3903 if (CHAR_CHARSET (c) == CHARSET_COMPOSITION) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3904 break; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3905 s->face = x_get_char_face_and_encoding (s->f, c, face_id, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3906 s->char2b + s->nchars, 1); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3907 s->font = s->face->font; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3908 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
|
3909 ++s->nchars; |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3912 /* If we find another composite char in the glyph definition of |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3913 work->cmpcharp, put back the rest of the glyphs on the work |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3914 stack, and make a new entry for the composite char. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3915 if (i < work->cmpcharp->glyph_len) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3916 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3917 /* Push back an unprocessed rest of this glyph spec. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3918 if (i < work->cmpcharp->glyph_len - 1) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3919 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3920 work->gidx = i + 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3921 work->next = *stack; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3922 *stack = work; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3923 work = *new; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3924 *new = NULL; |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3927 /* Make an entry for the composite char on the work stack. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3928 work->cmpcharp = cmpchar_table[COMPOSITE_CHAR_ID (c)]; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3929 work->gidx = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3930 work->next = *stack; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3931 *stack = work; |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3934 /* The width of this glyph string equals the width of the first |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3935 glyph. All characters are drawn at the same x-position. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3936 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
|
3937 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3938 /* 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
|
3939 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
|
3940 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
|
3941 characters of the glyph string. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3942 if (s->font == NULL) |
|
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 s->font_not_found_p = 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3945 s->font = FRAME_FONT (s->f); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3946 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3947 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3948 /* 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
|
3949 s->ybase += s->first_glyph->voffset; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3950 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3951 xassert (s->face && s->face->gc); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3952 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3953 /* 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
|
3954 s->two_byte_p = 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3955 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3956 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3957 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3958 /* Load glyph string S with a sequence of non-composite characters. |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3959 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
|
3960 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
|
3961 OVERLAPS_P non-zero means S should draw the foreground only, and |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3962 use its lines physical height for clipping. |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3963 |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3964 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
|
3965 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3966 static int |
|
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3967 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
|
3968 struct glyph_string *s; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3969 int face_id; |
|
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3970 int start, end, overlaps_p; |
|
24991
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 struct glyph *glyph, *last; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3973 int voffset; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3974 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3975 xassert (s->charset != CHARSET_COMPOSITION); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3976 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
|
3977 xassert (s->nchars == 0); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3978 xassert (start >= 0 && end > start); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3979 |
|
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
3980 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
|
3981 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
|
3982 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
|
3983 voffset = glyph->voffset; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3984 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3985 while (glyph < last |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3986 && glyph->type == CHAR_GLYPH |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3987 && glyph->voffset == voffset |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3988 /* Same face id implies same charset, nowadays. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3989 && glyph->u.ch.face_id == face_id) |
|
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 s->face = x_get_glyph_face_and_encoding (s->f, glyph, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3992 s->char2b + s->nchars); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3993 if (s->char2b[s->nchars].byte2 != 0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3994 s->two_byte_p = 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3995 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3996 ++s->nchars; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3997 xassert (s->nchars <= end - start); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3998 s->width += glyph->pixel_width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
3999 ++glyph; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4000 } |
|
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 s->font = s->face->font; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4003 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
|
4004 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4005 /* 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
|
4006 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
|
4007 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
|
4008 characters of the glyph string. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4009 if (s->font == NULL) |
|
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 s->font_not_found_p = 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4012 s->font = FRAME_FONT (s->f); |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4015 /* 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
|
4016 s->ybase += voffset; |
|
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4017 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4018 xassert (s->face && s->face->gc); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4019 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
|
4020 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4021 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4022 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4023 /* 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
|
4024 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4025 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4026 x_fill_image_glyph_string (s) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4027 struct glyph_string *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 xassert (s->first_glyph->type == IMAGE_GLYPH); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4030 s->img = IMAGE_FROM_ID (s->f, s->first_glyph->u.img.id); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4031 xassert (s->img); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4032 s->face = FACE_FROM_ID (s->f, s->first_glyph->u.img.face_id); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4033 s->font = s->face->font; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4034 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
|
4035 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4036 /* 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
|
4037 s->ybase += s->first_glyph->voffset; |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4040 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4041 /* Fill glyph string S from stretch glyph S->first_glyph. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4042 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4043 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4044 x_fill_stretch_glyph_string (s) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4045 struct glyph_string *s; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4046 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4047 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
|
4048 s->face = FACE_FROM_ID (s->f, s->first_glyph->u.stretch.face_id); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4049 s->font = s->face->font; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4050 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
|
4051 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4052 /* 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
|
4053 s->ybase += s->first_glyph->voffset; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4054 } |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4057 /* 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
|
4058 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
|
4059 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
|
4060 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
|
4061 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
|
4062 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
|
4063 face-override for drawing S. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4064 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4065 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4066 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
|
4067 struct glyph_string *s; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4068 XChar2b *char2b; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4069 struct window *w; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4070 struct glyph_row *row; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4071 enum glyph_row_area area; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4072 int start; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4073 enum draw_glyphs_face hl; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4074 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4075 bzero (s, sizeof *s); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4076 s->w = w; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4077 s->f = XFRAME (w->frame); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4078 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
|
4079 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
|
4080 s->char2b = char2b; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4081 s->hl = hl; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4082 s->row = row; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4083 s->area = area; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4084 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
|
4085 s->height = row->height; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4086 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
|
4087 |
|
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
4088 /* 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
|
4089 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
|
4090 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
|
4091 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4092 s->ybase = s->y + row->ascent; |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4095 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4096 /* 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
|
4097 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
|
4098 in the drawing area. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4099 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4100 static INLINE void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4101 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
|
4102 struct glyph_string *s; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4103 int start; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4104 int last_x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4105 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4106 /* 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
|
4107 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
|
4108 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
|
4109 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4110 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
|
4111 && s->hl == DRAW_NORMAL_TEXT |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4112 && ((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
|
4113 || s->face->background != default_face->background |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4114 || s->face->stipple != default_face->stipple)) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4115 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
|
4116 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4117 /* 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
|
4118 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
|
4119 area. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4120 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
|
4121 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
|
4122 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4123 s->background_width = s->width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4124 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4125 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4126 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4127 /* 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
|
4128 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
|
4129 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
|
4130 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
|
4131 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
|
4132 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
|
4133 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
|
4134 |
|
25692
121bd925411f
Don't continue #define args for benefit of old cc.
Dave Love <fx@gnu.org>
parents:
25682
diff
changeset
|
4135 /* 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
|
4136 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
|
4137 #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
|
4138 do \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4139 { \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4140 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
|
4141 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
|
4142 x_fill_stretch_glyph_string (s); \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4143 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
|
4144 ++START; \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4145 s->x = (X); \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4146 } \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4147 while (0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4148 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4149 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4150 /* 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
|
4151 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
|
4152 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
|
4153 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
|
4154 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
|
4155 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
|
4156 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
|
4157 |
|
25692
121bd925411f
Don't continue #define args for benefit of old cc.
Dave Love <fx@gnu.org>
parents:
25682
diff
changeset
|
4158 #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
|
4159 do \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4160 { \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4161 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
|
4162 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
|
4163 x_fill_image_glyph_string (s); \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4164 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
|
4165 ++START; \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4166 s->x = (X); \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4167 } \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4168 while (0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4169 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4170 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4171 /* 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
|
4172 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
|
4173 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
|
4174 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
|
4175 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
|
4176 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
|
4177 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
|
4178 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
|
4179 |
|
25692
121bd925411f
Don't continue #define args for benefit of old cc.
Dave Love <fx@gnu.org>
parents:
25682
diff
changeset
|
4180 #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
|
4181 do \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4182 { \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4183 int c, charset, face_id; \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4184 XChar2b *char2b; \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4185 \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4186 c = (ROW)->glyphs[AREA][START].u.ch.code; \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4187 charset = CHAR_CHARSET (c); \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4188 face_id = (ROW)->glyphs[AREA][START].u.ch.face_id; \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4189 \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4190 if (charset == CHARSET_COMPOSITION) \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4191 { \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4192 struct work *stack, *work, *new = NULL; \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4193 int n = 0; \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4194 struct glyph_string *first_s = NULL; \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4195 \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4196 /* Push an initial entry for character c on the stack. */ \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4197 stack = NULL; \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4198 work = (struct work *) alloca (sizeof *work); \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4199 work->cmpcharp = cmpchar_table[COMPOSITE_CHAR_ID (c)]; \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4200 work->gidx = 0; \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4201 work->next = stack; \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4202 stack = work; \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4203 \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4204 /* While the stack is not empty, append glyph_strings \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4205 to head/tail for glyphs to draw. */ \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4206 while (stack) \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4207 { \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4208 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
|
4209 char2b = (XChar2b *) alloca (stack->cmpcharp->glyph_len \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4210 * sizeof (XChar2b)); \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4211 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
|
4212 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
|
4213 s->cmpcharp = stack->cmpcharp; \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4214 s->gidx = stack->gidx; \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4215 s->charset = charset; \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4216 s->x = (X); \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4217 \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4218 if (n == 0) \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4219 { \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4220 /* Don't draw the background except for the \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4221 first glyph string. */ \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4222 s->background_filled_p = n > 0; \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4223 first_s = s; \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4224 } \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4225 ++n; \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4226 \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4227 if (new == NULL) \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4228 new = (struct work *) alloca (sizeof *new); \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4229 x_fill_composite_glyph_string (s, face_id, &stack, \ |
|
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4230 &new, OVERLAPS_P); \ |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4231 } \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4232 \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4233 ++START; \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4234 s = first_s; \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4235 } \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4236 else \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4237 { \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4238 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
|
4239 char2b = (XChar2b *) alloca ((END - START) * sizeof *char2b); \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4240 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
|
4241 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
|
4242 s->charset = charset; \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4243 s->x = (X); \ |
|
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4244 START = x_fill_glyph_string (s, face_id, START, END, \ |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4245 OVERLAPS_P); \ |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4246 } \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4247 } \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4248 while (0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4249 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4250 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4251 /* 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
|
4252 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
|
4253 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
|
4254 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
|
4255 x-positions of the drawing area. |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4256 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4257 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
|
4258 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
|
4259 asynchronously). */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4260 |
|
25692
121bd925411f
Don't continue #define args for benefit of old cc.
Dave Love <fx@gnu.org>
parents:
25682
diff
changeset
|
4261 #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
|
4262 do \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4263 { \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4264 HEAD = TAIL = NULL; \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4265 while (START < END) \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4266 { \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4267 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
|
4268 switch (first_glyph->type) \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4269 { \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4270 case CHAR_GLYPH: \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4271 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
|
4272 TAIL, HL, X, LAST_X, \ |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4273 OVERLAPS_P); \ |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4274 break; \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4275 \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4276 case STRETCH_GLYPH: \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4277 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
|
4278 HEAD, TAIL, HL, X, LAST_X); \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4279 break; \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4280 \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4281 case IMAGE_GLYPH: \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4282 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
|
4283 TAIL, HL, X, LAST_X); \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4284 break; \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4285 \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4286 default: \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4287 abort (); \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4288 } \ |
|
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 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
|
4291 (X) += s->width; \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4292 } \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4293 } \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4294 while (0) |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4297 /* 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
|
4298 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
|
4299 face-override with the following meaning: |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4300 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4301 DRAW_NORMAL_TEXT draw normally |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4302 DRAW_CURSOR draw in cursor face |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4303 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
|
4304 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
|
4305 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
|
4306 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
|
4307 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4308 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
|
4309 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
|
4310 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
|
4311 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
|
4312 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
|
4313 |
|
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4314 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
|
4315 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
|
4316 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4317 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
|
4318 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4319 static int |
|
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4320 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
|
4321 overlaps_p) |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4322 struct window *w; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4323 int x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4324 struct glyph_row *row; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4325 enum glyph_row_area area; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4326 int start, end; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4327 enum draw_glyphs_face hl; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4328 int *real_start, *real_end; |
|
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4329 int overlaps_p; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4330 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4331 struct glyph_string *head, *tail; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4332 struct glyph_string *s; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4333 int last_x, area_width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4334 int x_reached; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4335 int i, j; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4336 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4337 /* Let's rather be paranoid than getting a SEGV. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4338 start = max (0, start); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4339 end = min (end, row->used[area]); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4340 if (real_start) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4341 *real_start = start; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4342 if (real_end) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4343 *real_end = end; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4344 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4345 /* 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
|
4346 end of the drawing area. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4347 if (row->full_width_p) |
|
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 /* 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
|
4350 or flag areas. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4351 struct frame *f = XFRAME (w->frame); |
| 25465 | 4352 /* 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
|
4353 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
|
4354 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4355 x += window_left_x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4356 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
|
4357 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
|
4358 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4359 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
|
4360 { |
| 25465 | 4361 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
|
4362 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
|
4363 last_x += width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4364 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4365 x -= width; |
|
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 |
|
25083
d3b7d7d2bca8
(x_setup_relief_color): Don't try smart color allocation
Gerd Moellmann <gerd@gnu.org>
parents:
25079
diff
changeset
|
4368 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
|
4369 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
|
4370 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4371 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4372 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4373 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
|
4374 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
|
4375 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
|
4376 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4377 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4378 /* 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
|
4379 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
|
4380 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
|
4381 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
|
4382 i = start; |
|
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4383 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
|
4384 overlaps_p); |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4385 if (tail) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4386 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
|
4387 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4388 x_reached = x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4389 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4390 /* 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
|
4391 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
|
4392 strings built above. */ |
|
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4393 if (!overlaps_p && row->contains_overlapping_glyphs_p) |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4394 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4395 int dummy_x = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4396 struct glyph_string *h, *t; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4397 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4398 /* Compute overhangs for all glyph strings. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4399 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
|
4400 x_compute_glyph_string_overhangs (s); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4401 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4402 /* 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
|
4403 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
|
4404 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
|
4405 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
|
4406 draws over it. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4407 i = x_left_overwritten (head); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4408 if (i >= 0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4409 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4410 j = i; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4411 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
|
4412 DRAW_NORMAL_TEXT, dummy_x, last_x, |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4413 overlaps_p); |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4414 start = i; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4415 if (real_start) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4416 *real_start = start; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4417 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
|
4418 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
|
4419 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4420 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4421 /* 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
|
4422 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
|
4423 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
|
4424 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
|
4425 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
|
4426 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
|
4427 strings exist. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4428 i = x_left_overwriting (head); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4429 if (i >= 0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4430 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4431 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
|
4432 DRAW_NORMAL_TEXT, dummy_x, last_x, |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4433 overlaps_p); |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4434 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
|
4435 s->background_filled_p = 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4436 if (real_start) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4437 *real_start = i; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4438 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
|
4439 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
|
4440 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4441 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4442 /* 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
|
4443 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
|
4444 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
|
4445 over it. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4446 i = x_right_overwritten (tail); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4447 if (i >= 0) |
|
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 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
|
4450 DRAW_NORMAL_TEXT, x, last_x, |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4451 overlaps_p); |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4452 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
|
4453 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
|
4454 if (real_end) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4455 *real_end = i; |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4458 /* 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
|
4459 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
|
4460 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
|
4461 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
|
4462 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
|
4463 i = x_right_overwriting (tail); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4464 if (i >= 0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4465 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4466 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
|
4467 DRAW_NORMAL_TEXT, x, last_x, |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4468 overlaps_p); |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4469 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
|
4470 s->background_filled_p = 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4471 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
|
4472 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
|
4473 if (real_end) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4474 *real_end = i; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4475 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4476 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4477 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4478 /* Draw all strings. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4479 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
|
4480 x_draw_glyph_string (s); |
|
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 /* 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
|
4483 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
|
4484 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
|
4485 if (!row->full_width_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4486 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4487 if (area > LEFT_MARGIN_AREA) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4488 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
|
4489 if (area > TEXT_AREA) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4490 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
|
4491 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4492 return x_reached; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4493 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4494 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4495 |
|
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4496 /* 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
|
4497 |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4498 static void |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4499 x_fix_overlapping_area (w, row, area) |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4500 struct window *w; |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4501 struct glyph_row *row; |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4502 enum glyph_row_area area; |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4503 { |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4504 int i, x; |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4505 |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4506 BLOCK_INPUT; |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4507 |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4508 if (area == LEFT_MARGIN_AREA) |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4509 x = 0; |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4510 else if (area == TEXT_AREA) |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4511 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
|
4512 else |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4513 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
|
4514 + window_box_width (w, TEXT_AREA)); |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4515 |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4516 for (i = 0; i < row->used[area];) |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4517 { |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4518 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
|
4519 { |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4520 int start = i, start_x = x; |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4521 |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4522 do |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4523 { |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4524 x += row->glyphs[area][i].pixel_width; |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4525 ++i; |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4526 } |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4527 while (i < row->used[area] |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4528 && row->glyphs[area][i].overlaps_vertically_p); |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4529 |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4530 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
|
4531 (row->inverse_p |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4532 ? DRAW_INVERSE_VIDEO : DRAW_NORMAL_TEXT), |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4533 NULL, NULL, 1); |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4534 } |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4535 else |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4536 { |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4537 x += row->glyphs[area][i].pixel_width; |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4538 ++i; |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4539 } |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4540 } |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4541 |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4542 UNBLOCK_INPUT; |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4543 } |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4544 |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4545 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4546 /* 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
|
4547 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
|
4548 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
|
4549 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
|
4550 row being updated. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4551 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4552 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4553 x_write_glyphs (start, len) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4554 struct glyph *start; |
| 286 | 4555 int len; |
| 4556 { | |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4557 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
|
4558 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4559 xassert (updated_window && updated_row); |
| 286 | 4560 BLOCK_INPUT; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4561 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4562 /* Write glyphs. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4563 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4564 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
|
4565 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
|
4566 updated_row, updated_area, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4567 hpos, hpos + len, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4568 (updated_row->inverse_p |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4569 ? DRAW_INVERSE_VIDEO : DRAW_NORMAL_TEXT), |
|
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
4570 &real_start, &real_end, 0); |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4571 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4572 /* 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
|
4573 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
|
4574 real_end - real_start); |
| 286 | 4575 |
| 4576 UNBLOCK_INPUT; | |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4577 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4578 /* Advance the output cursor. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4579 output_cursor.hpos += len; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4580 output_cursor.x = x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4581 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4582 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4583 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4584 /* 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
|
4585 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4586 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4587 x_insert_glyphs (start, len) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4588 struct glyph *start; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4589 register int len; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4590 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4591 struct frame *f; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4592 struct window *w; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4593 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
|
4594 struct glyph_row *row; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4595 struct glyph *glyph; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4596 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
|
4597 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4598 xassert (updated_window && updated_row); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4599 BLOCK_INPUT; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4600 w = updated_window; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4601 f = XFRAME (WINDOW_FRAME (w)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4602 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4603 /* 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
|
4604 row = updated_row; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4605 line_height = row->height; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4606 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4607 /* 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
|
4608 shift_by_width = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4609 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
|
4610 shift_by_width += glyph->pixel_width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4611 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4612 /* 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
|
4613 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
|
4614 - output_cursor.x |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4615 - shift_by_width); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4616 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4617 /* Shift right. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4618 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
|
4619 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
|
4620 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
|
4621 f->output_data.x->normal_gc, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4622 frame_x, frame_y, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4623 shifted_region_width, line_height, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4624 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
|
4625 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4626 /* Write the glyphs. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4627 hpos = start - row->glyphs[updated_area]; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4628 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
|
4629 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
|
4630 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
|
4631 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4632 /* Advance the output cursor. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4633 output_cursor.hpos += len; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4634 output_cursor.x += shift_by_width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4635 UNBLOCK_INPUT; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4636 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4637 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4638 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4639 /* 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
|
4640 for X frames. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4641 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4642 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4643 x_delete_glyphs (n) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4644 register int n; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4645 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4646 abort (); |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4649 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4650 /* 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
|
4651 (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
|
4652 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
|
4653 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4654 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
|
4655 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
|
4656 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4657 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4658 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
|
4659 int to_x; |
|
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 struct frame *f; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4662 struct window *w = updated_window; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4663 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
|
4664 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
|
4665 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4666 xassert (updated_window && updated_row); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4667 f = XFRAME (w->frame); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4668 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4669 if (updated_row->full_width_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4670 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4671 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
|
4672 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
|
4673 && !w->pseudo_window_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4674 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
|
4675 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4676 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4677 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
|
4678 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
|
4679 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4680 /* 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
|
4681 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
|
4682 if (to_x == 0) |
| 286 | 4683 return; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4684 else if (to_x < 0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4685 to_x = max_x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4686 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4687 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
|
4688 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4689 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
|
4690 |
| 429 | 4691 /* 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
|
4692 if (!updated_row->full_width_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4693 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
|
4694 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4695 from_x = output_cursor.x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4696 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4697 /* Translate to frame coordinates. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4698 if (updated_row->full_width_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4699 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4700 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
|
4701 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
|
4702 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4703 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4704 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4705 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
|
4706 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
|
4707 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4708 |
| 25546 | 4709 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
|
4710 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
|
4711 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
|
4712 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4713 /* 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
|
4714 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
|
4715 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4716 BLOCK_INPUT; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4717 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
|
4718 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
|
4719 False); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4720 UNBLOCK_INPUT; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4721 } |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4724 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4725 /* 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
|
4726 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
|
4727 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4728 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4729 x_clear_frame () |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4730 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4731 struct frame *f; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4732 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4733 if (updating_frame) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4734 f = updating_frame; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4735 else |
|
25682
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
4736 f = SELECTED_FRAME (); |
| 771 | 4737 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4738 /* 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
|
4739 longer visible. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4740 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
|
4741 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
|
4742 output_cursor.x = -1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4743 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4744 /* 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
|
4745 follow an explicit cursor_to. */ |
| 286 | 4746 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
|
4747 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
|
4748 |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
4749 /* 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
|
4750 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
|
4751 x_scroll_bar_clear (f); |
|
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4752 |
|
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
4753 XFlush (FRAME_X_DISPLAY (f)); |
| 286 | 4754 UNBLOCK_INPUT; |
| 4755 } | |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4756 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4757 |
|
6791
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
4758 |
|
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4759 /* 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
|
4760 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4761 /* 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
|
4762 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
|
4763 |
|
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4764 #if defined (HAVE_TIMEVAL) && defined (HAVE_SELECT) |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4765 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4766 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4767 /* 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
|
4768 *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
|
4769 |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4770 static int |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4771 timeval_subtract (result, x, y) |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4772 struct timeval *result, x, y; |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4773 { |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4774 /* 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
|
4775 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
|
4776 if (x.tv_usec < y.tv_usec) |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4777 { |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4778 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
|
4779 y.tv_usec -= 1000000 * nsec; |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4780 y.tv_sec += nsec; |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4781 } |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4782 |
|
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4783 if (x.tv_usec - y.tv_usec > 1000000) |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4784 { |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4785 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
|
4786 y.tv_usec += 1000000 * nsec; |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4787 y.tv_sec -= nsec; |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4788 } |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4789 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4790 /* 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
|
4791 positive. */ |
|
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4792 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
|
4793 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
|
4794 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4795 /* 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
|
4796 negative. */ |
|
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4797 return x.tv_sec < y.tv_sec; |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4798 } |
| 286 | 4799 |
| 21514 | 4800 void |
| 771 | 4801 XTflash (f) |
| 4802 struct frame *f; | |
| 286 | 4803 { |
| 4804 BLOCK_INPUT; | |
|
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4805 |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4806 { |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4807 GC gc; |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4808 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4809 /* 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
|
4810 pixels into background pixels. */ |
|
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4811 { |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4812 XGCValues values; |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4813 |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4814 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
|
4815 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
|
4816 ^ f->output_data.x->background_pixel); |
|
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
4817 |
|
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
4818 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
|
4819 GCFunction | GCForeground, &values); |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4820 } |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4821 |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4822 { |
|
16352
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4823 /* 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
|
4824 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
|
4825 /* 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
|
4826 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
|
4827 /* 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
|
4828 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
|
4829 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
|
4830 |
|
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4831 int width; |
|
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4832 |
|
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4833 /* 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
|
4834 edge it is next to. */ |
|
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4835 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
|
4836 { |
|
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4837 case vertical_scroll_bar_left: |
|
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4838 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
|
4839 break; |
|
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4840 |
|
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4841 case vertical_scroll_bar_right: |
|
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4842 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
|
4843 break; |
|
24991
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 default: |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4846 break; |
|
16352
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4847 } |
|
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4848 |
|
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4849 width = flash_right - flash_left; |
|
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4850 |
|
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4851 /* 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
|
4852 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
|
4853 { |
|
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4854 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
|
4855 flash_left, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4856 (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
|
4857 + 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
|
4858 width, flash_height); |
|
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4859 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
|
4860 flash_left, |
|
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4861 (height - flash_height |
|
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4862 - FRAME_INTERNAL_BORDER_WIDTH (f)), |
|
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4863 width, flash_height); |
|
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4864 } |
|
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4865 else |
|
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4866 /* 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
|
4867 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
|
4868 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
|
4869 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
|
4870 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4871 x_flush (f); |
|
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4872 |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4873 { |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4874 struct timeval wakeup; |
|
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4875 |
|
5362
d1fa597d923d
(XTflush): FIx typo in last change.
Richard M. Stallman <rms@gnu.org>
parents:
5357
diff
changeset
|
4876 EMACS_GET_TIME (wakeup); |
|
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4877 |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4878 /* 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
|
4879 wakeup.tv_usec += 150000; |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4880 wakeup.tv_sec += (wakeup.tv_usec / 1000000); |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4881 wakeup.tv_usec %= 1000000; |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4882 |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4883 /* Keep waiting until past the time wakeup. */ |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4884 while (1) |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4885 { |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4886 struct timeval timeout; |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4887 |
|
5362
d1fa597d923d
(XTflush): FIx typo in last change.
Richard M. Stallman <rms@gnu.org>
parents:
5357
diff
changeset
|
4888 EMACS_GET_TIME (timeout); |
|
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4889 |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4890 /* In effect, timeout = wakeup - timeout. |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4891 Break if result would be negative. */ |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4892 if (timeval_subtract (&timeout, wakeup, timeout)) |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4893 break; |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4894 |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4895 /* 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
|
4896 select (0, NULL, NULL, NULL, &timeout); |
|
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4897 } |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4898 } |
|
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
4899 |
|
16352
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4900 /* 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
|
4901 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
|
4902 { |
|
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4903 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
|
4904 flash_left, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4905 (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
|
4906 + 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
|
4907 width, flash_height); |
|
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4908 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
|
4909 flash_left, |
|
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4910 (height - flash_height |
|
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4911 - FRAME_INTERNAL_BORDER_WIDTH (f)), |
|
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4912 width, flash_height); |
|
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4913 } |
|
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4914 else |
|
dfe3713f8c75
(XTflash): Don't flash in the internal borders.
Richard M. Stallman <rms@gnu.org>
parents:
16330
diff
changeset
|
4915 /* 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
|
4916 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
|
4917 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
|
4918 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
|
4919 |
|
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
4920 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
|
4921 x_flush (f); |
|
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4922 } |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4923 } |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4924 |
| 286 | 4925 UNBLOCK_INPUT; |
| 4926 } | |
| 4927 | |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4928 #endif /* defined (HAVE_TIMEVAL) && defined (HAVE_SELECT) */ |
|
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4929 |
| 286 | 4930 |
| 4931 /* Make audible bell. */ | |
| 4932 | |
| 21514 | 4933 void |
| 286 | 4934 XTring_bell () |
| 4935 { | |
|
25682
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
4936 struct frame *f = SELECTED_FRAME (); |
|
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
4937 |
|
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
4938 if (FRAME_X_DISPLAY (f)) |
|
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
4939 { |
|
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
4940 #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
|
4941 if (visible_bell) |
|
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
4942 XTflash (f); |
|
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
4943 else |
|
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
4944 #endif |
|
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
4945 { |
|
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
4946 BLOCK_INPUT; |
|
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
4947 XBell (FRAME_X_DISPLAY (f), 0); |
|
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
4948 XFlush (FRAME_X_DISPLAY (f)); |
|
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
4949 UNBLOCK_INPUT; |
|
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
4950 } |
| 286 | 4951 } |
| 4952 } | |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4953 |
| 286 | 4954 |
| 4955 /* Specify how many text lines, from the top of the window, | |
| 4956 should be affected by insert-lines and delete-lines operations. | |
| 4957 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
|
4958 that is bounded by calls to x_update_begin and x_update_end. */ |
| 286 | 4959 |
| 21514 | 4960 static void |
| 286 | 4961 XTset_terminal_window (n) |
| 4962 register int n; | |
| 4963 { | |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4964 /* This function intentionally left blank. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4965 } |
|
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 |
| 286 | 4968 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4969 /*********************************************************************** |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4970 Line Dance |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4973 /* 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
|
4974 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
|
4975 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4976 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4977 x_ins_del_lines (vpos, n) |
|
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
4978 int vpos, n; |
| 286 | 4979 { |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4980 abort (); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4981 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4982 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4983 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4984 /* 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
|
4985 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4986 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4987 x_scroll_run (w, run) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4988 struct window *w; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4989 struct run *run; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4990 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4991 struct frame *f = XFRAME (w->frame); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4992 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
|
4993 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4994 /* 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
|
4995 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
|
4996 left and right of W. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
4997 window_box (w, -1, &x, &y, &width, &height); |
| 25465 | 4998 width += FRAME_X_FLAGS_AREA_WIDTH (f); |
| 4999 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
|
5000 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5001 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
|
5002 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
|
5003 bottom_y = y + height; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5004 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5005 if (to_y < from_y) |
|
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 /* 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
|
5008 line at the bottom. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5009 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
|
5010 height = bottom_y - from_y; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5011 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5012 height = run->height; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5013 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5014 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5015 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5016 /* 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
|
5017 at the bottom. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5018 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
|
5019 height = bottom_y - to_y; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5020 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5021 height = run->height; |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5024 BLOCK_INPUT; |
|
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 /* 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
|
5027 updated_window = w; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5028 x_clear_cursor (w); |
|
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 XCopyArea (FRAME_X_DISPLAY (f), |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5031 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
|
5032 f->output_data.x->normal_gc, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5033 x, from_y, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5034 width, height, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5035 x, to_y); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5036 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5037 UNBLOCK_INPUT; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5038 } |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5041 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5042 /*********************************************************************** |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5043 Exposure Events |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5046 /* 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
|
5047 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
|
5048 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
|
5049 the entire frame. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5050 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5051 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5052 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
|
5053 struct frame *f; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5054 int x, y, w, h; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5055 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5056 XRectangle r; |
|
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 TRACE ((stderr, "expose_frame ")); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5059 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5060 /* 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
|
5061 if (FRAME_GARBAGED_P (f)) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5062 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5063 TRACE ((stderr, " garbaged\n")); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5064 return; |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5067 /* 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
|
5068 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
|
5069 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
|
5070 if (FRAME_FACE_CACHE (f) == NULL |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5071 || 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
|
5072 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5073 TRACE ((stderr, " no faces\n")); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5074 return; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5075 } |
|
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 if (w == 0 || h == 0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5078 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5079 r.x = r.y = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5080 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
|
5081 r.height = CANON_Y_UNIT (f) * f->height; |
| 286 | 5082 } |
| 5083 else | |
| 5084 { | |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5085 r.x = x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5086 r.y = y; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5087 r.width = w; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5088 r.height = h; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5089 } |
|
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 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
|
5092 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
|
5093 |
|
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
5094 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
|
5095 { |
|
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
5096 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
|
5097 XRectangle window_rect; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5098 XRectangle intersection_rect; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5099 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
|
5100 |
|
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 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
|
5103 window_rect.x = window_x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5104 window_rect.y = window_y; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5105 window_rect.width = window_width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5106 window_rect.height = window_height; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5107 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5108 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
|
5109 expose_window (w, &intersection_rect); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5110 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5111 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5112 #ifndef USE_X_TOOLKIT |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5113 if (WINDOWP (f->menu_bar_window)) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5114 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5115 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
|
5116 XRectangle window_rect; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5117 XRectangle intersection_rect; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5118 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
|
5119 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5120 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5121 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
|
5122 window_rect.x = window_x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5123 window_rect.y = window_y; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5124 window_rect.width = window_width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5125 window_rect.height = window_height; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5126 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5127 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
|
5128 expose_window (w, &intersection_rect); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5129 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5130 #endif /* not USE_X_TOOLKIT */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5131 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5132 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5133 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5134 /* 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
|
5135 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
|
5136 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5137 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5138 expose_window_tree (w, r) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5139 struct window *w; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5140 XRectangle *r; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5141 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5142 while (w) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5143 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5144 if (!NILP (w->hchild)) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5145 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
|
5146 else if (!NILP (w->vchild)) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5147 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
|
5148 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5149 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5150 XRectangle window_rect; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5151 XRectangle intersection_rect; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5152 struct frame *f = XFRAME (w->frame); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5153 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
|
5154 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5155 /* Frame-relative pixel rectangle of W. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5156 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
|
5157 &window_height); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5158 window_rect.x |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5159 = (window_x |
| 25465 | 5160 - 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
|
5161 - 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
|
5162 window_rect.y = window_y; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5163 window_rect.width |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5164 = (window_width |
| 25465 | 5165 + 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
|
5166 + 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
|
5167 window_rect.height |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5168 = 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
|
5169 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5170 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
|
5171 expose_window (w, &intersection_rect); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5172 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5173 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5174 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
|
5175 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5176 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5177 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5178 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5179 /* 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
|
5180 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
|
5181 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5182 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5183 expose_area (w, row, r, area) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5184 struct window *w; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5185 struct glyph_row *row; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5186 XRectangle *r; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5187 enum glyph_row_area area; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5188 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5189 int x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5190 struct glyph *first = row->glyphs[area]; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5191 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
|
5192 struct glyph *last; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5193 int first_x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5194 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5195 /* 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
|
5196 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
|
5197 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
|
5198 if (area == LEFT_MARGIN_AREA) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5199 x = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5200 else if (area == TEXT_AREA) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5201 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
|
5202 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5203 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
|
5204 + window_box_width (w, TEXT_AREA)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5205 |
|
25306
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5206 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
|
5207 /* 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
|
5208 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
|
5209 0, row->used[area], |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5210 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
|
5211 NULL, NULL, 0); |
|
25306
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5212 else |
|
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5213 { |
|
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5214 /* 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
|
5215 while (first < end |
|
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5216 && 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
|
5217 { |
|
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5218 x += first->pixel_width; |
|
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5219 ++first; |
|
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5220 } |
|
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5221 |
|
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5222 /* Find the last one. */ |
|
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5223 last = first; |
|
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5224 first_x = x; |
|
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5225 while (last < end |
|
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5226 && 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
|
5227 { |
|
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5228 x += last->pixel_width; |
|
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5229 ++last; |
|
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5230 } |
|
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5231 |
|
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5232 /* Repaint. */ |
|
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5233 if (last > first) |
|
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5234 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
|
5235 first - row->glyphs[area], |
|
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5236 last - row->glyphs[area], |
|
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5237 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
|
5238 NULL, NULL, 0); |
|
5bcee7af1643
(expose_area): If row extends face to end of line,
Gerd Moellmann <gerd@gnu.org>
parents:
25302
diff
changeset
|
5239 } |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5240 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5241 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5242 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5243 /* 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
|
5244 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
|
5245 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5246 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5247 expose_line (w, row, r) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5248 struct window *w; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5249 struct glyph_row *row; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5250 XRectangle *r; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5251 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5252 xassert (row->enabled_p); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5253 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5254 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
|
5255 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
|
5256 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
|
5257 NULL, NULL, 0); |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5258 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5259 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5260 if (row->used[LEFT_MARGIN_AREA]) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5261 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
|
5262 if (row->used[TEXT_AREA]) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5263 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
|
5264 if (row->used[RIGHT_MARGIN_AREA]) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5265 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
|
5266 x_draw_row_bitmaps (w, row); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5267 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5268 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5269 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5270 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5271 /* 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
|
5272 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5273 static int |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5274 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
|
5275 struct window *w; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5276 XRectangle *r; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5277 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5278 XRectangle cr, result; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5279 struct glyph *cursor_glyph; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5280 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5281 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
|
5282 if (cursor_glyph) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5283 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5284 cr.x = w->phys_cursor.x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5285 cr.y = w->phys_cursor.y; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5286 cr.width = cursor_glyph->pixel_width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5287 cr.height = w->phys_cursor_height; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5288 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
|
5289 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5290 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5291 return 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5292 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5293 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5294 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5295 /* 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
|
5296 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
|
5297 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5298 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5299 expose_window (w, r) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5300 struct window *w; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5301 XRectangle *r; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5302 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5303 struct glyph_row *row; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5304 int y; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5305 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
|
5306 int cursor_cleared_p; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5307 |
|
25529
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
5308 /* 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
|
5309 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
|
5310 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
|
5311 created window. */ |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
5312 if (w->current_matrix == NULL) |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
5313 return; |
|
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
5314 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5315 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
|
5316 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
|
5317 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5318 /* Convert to window coordinates. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5319 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
|
5320 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
|
5321 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5322 /* Turn off the cursor. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5323 if (!w->pseudo_window_p |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5324 && 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
|
5325 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5326 x_clear_cursor (w); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5327 cursor_cleared_p = 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5328 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5329 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5330 cursor_cleared_p = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5331 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5332 /* 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
|
5333 row = w->current_matrix->rows; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5334 y = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5335 while (row->enabled_p |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5336 && y < yb |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5337 && y + row->height < r->y) |
|
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 y += row->height; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5340 ++row; |
|
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 |
| 286 | 5343 /* 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
|
5344 while (row->enabled_p |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5345 && y < yb |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5346 && y < r->y + r->height) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5347 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5348 expose_line (w, row, r); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5349 y += row->height; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5350 ++row; |
|
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 /* 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
|
5354 if (WINDOW_WANTS_MODELINE_P (w) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5355 && (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
|
5356 row->enabled_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5357 && row->y < r->y + r->height) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5358 expose_line (w, row, r); |
|
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 if (!w->pseudo_window_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5361 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5362 /* Draw border between windows. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5363 x_draw_vertical_border (w); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5364 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5365 /* Turn the cursor on again. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5366 if (cursor_cleared_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5367 x_update_window_cursor (w, 1); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5368 } |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5371 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5372 /* 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
|
5373 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
|
5374 empty. */ |
|
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 static int |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5377 x_intersect_rectangles (r1, r2, result) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5378 XRectangle *r1, *r2, *result; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5379 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5380 XRectangle *left, *right; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5381 XRectangle *upper, *lower; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5382 int intersection_p = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5383 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5384 /* 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
|
5385 if (r1->x < r2->x) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5386 left = r1, right = r2; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5387 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5388 left = r2, right = r1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5389 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5390 /* 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
|
5391 otherwise there is no intersection. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5392 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
|
5393 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5394 result->x = right->x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5395 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5396 /* 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
|
5397 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
|
5398 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
|
5399 - result->x); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5400 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5401 /* Same game for Y. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5402 if (r1->y < r2->y) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5403 upper = r1, lower = r2; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5404 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5405 upper = r2, lower = r1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5406 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5407 /* 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
|
5408 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
|
5409 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
|
5410 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5411 result->y = lower->y; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5412 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5413 /* 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
|
5414 ends of upper and lower. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5415 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
|
5416 upper->y + upper->height) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5417 - result->y); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5418 intersection_p = 1; |
|
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 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5421 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5422 return intersection_p; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5423 } |
|
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 |
|
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 |
| 286 | 5428 |
| 5429 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
|
5430 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
|
5431 struct frame *f; |
| 286 | 5432 { |
|
3943
cbdf67dd68d0
* xterm.c (frame_highlight, frame_unhighlight): Don't test
Jim Blandy <jimb@redhat.com>
parents:
3938
diff
changeset
|
5433 /* 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
|
5434 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
|
5435 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
|
5436 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
|
5437 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
|
5438 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
|
5439 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
|
5440 UNBLOCK_INPUT; |
|
12431
80a5aedfb4c7
(XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents:
12192
diff
changeset
|
5441 x_update_cursor (f, 1); |
| 286 | 5442 } |
| 5443 | |
| 5444 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
|
5445 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
|
5446 struct frame *f; |
| 286 | 5447 { |
|
3943
cbdf67dd68d0
* xterm.c (frame_highlight, frame_unhighlight): Don't test
Jim Blandy <jimb@redhat.com>
parents:
3938
diff
changeset
|
5448 /* 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
|
5449 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
|
5450 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
|
5451 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
|
5452 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
|
5453 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
|
5454 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
|
5455 UNBLOCK_INPUT; |
|
12431
80a5aedfb4c7
(XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents:
12192
diff
changeset
|
5456 x_update_cursor (f, 1); |
| 286 | 5457 } |
| 5458 | |
| 771 | 5459 /* The focus has changed. Update the frames as necessary to reflect |
| 5460 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
|
5461 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
|
5462 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
|
5463 Lisp code can tell when the switch took place by examining the events. */ |
| 369 | 5464 |
| 5465 static void | |
|
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5466 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
|
5467 struct x_display_info *dpyinfo; |
| 771 | 5468 struct frame *frame; |
| 286 | 5469 { |
|
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5470 struct frame *old_focus = dpyinfo->x_focus_frame; |
| 286 | 5471 |
|
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5472 if (frame != dpyinfo->x_focus_frame) |
| 286 | 5473 { |
|
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
5474 /* Set this before calling other routines, so that they see |
| 771 | 5475 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
|
5476 dpyinfo->x_focus_frame = frame; |
| 369 | 5477 |
| 5478 if (old_focus && old_focus->auto_lower) | |
| 771 | 5479 x_lower_frame (old_focus); |
| 286 | 5480 |
| 5481 #if 0 | |
| 771 | 5482 selected_frame = frame; |
|
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
5483 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
|
5484 selected_frame); |
| 771 | 5485 Fselect_window (selected_frame->selected_window); |
| 5486 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
|
5487 #endif /* ! 0 */ |
| 286 | 5488 |
|
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5489 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
|
5490 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
|
5491 else |
|
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
5492 pending_autoraise_frame = 0; |
| 369 | 5493 } |
| 5494 | |
|
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5495 x_frame_rehighlight (dpyinfo); |
| 369 | 5496 } |
| 5497 | |
|
10223
97fc8c6b4a74
(XTupdate_begin): Discard records of prior mouse highlight
Richard M. Stallman <rms@gnu.org>
parents:
9823
diff
changeset
|
5498 /* 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
|
5499 |
|
97fc8c6b4a74
(XTupdate_begin): Discard records of prior mouse highlight
Richard M. Stallman <rms@gnu.org>
parents:
9823
diff
changeset
|
5500 void |
|
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5501 x_mouse_leave (dpyinfo) |
|
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5502 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
|
5503 { |
|
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5504 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
|
5505 } |
| 369 | 5506 |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
5507 /* 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
|
5508 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
|
5509 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
|
5510 |
|
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5511 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
|
5512 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
|
5513 the appropriate X display info. */ |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5514 |
| 369 | 5515 static void |
|
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5516 XTframe_rehighlight (frame) |
|
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5517 struct frame *frame; |
| 369 | 5518 { |
|
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5519 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
|
5520 } |
|
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5521 |
|
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5522 static void |
|
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5523 x_frame_rehighlight (dpyinfo) |
|
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5524 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
|
5525 { |
|
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5526 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
|
5527 |
|
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5528 if (dpyinfo->x_focus_frame) |
| 286 | 5529 { |
|
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5530 dpyinfo->x_highlight_frame |
|
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5531 = ((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
|
5532 ? 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
|
5533 : dpyinfo->x_focus_frame); |
|
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5534 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
|
5535 { |
|
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5536 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
|
5537 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
|
5538 } |
| 286 | 5539 } |
| 369 | 5540 else |
|
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5541 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
|
5542 |
|
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
5543 if (dpyinfo->x_highlight_frame != old_highlight) |
| 369 | 5544 { |
| 5545 if (old_highlight) | |
| 771 | 5546 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
|
5547 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
|
5548 frame_highlight (dpyinfo->x_highlight_frame); |
| 369 | 5549 } |
| 286 | 5550 } |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5551 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5552 |
| 286 | 5553 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5554 /* Keyboard processing - modifier keys, vendor-specific keysyms, etc. */ |
| 286 | 5555 |
|
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5556 /* 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
|
5557 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
|
5558 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
|
5559 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
|
5560 { |
|
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5561 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
|
5562 KeySym *syms; |
|
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5563 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
|
5564 XModifierKeymap *mods; |
|
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5565 |
|
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5566 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
|
5567 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
|
5568 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
|
5569 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
|
5570 dpyinfo->hyper_mod_mask = 0; |
|
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
5571 |
|
2127
adaf588e32a6
* xterm.c (x_find_modifier_meanings): XDisplayKeycodes only
Jim Blandy <jimb@redhat.com>
parents:
2064
diff
changeset
|
5572 #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
|
5573 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
|
5574 #else |
|
13884
26245345f6f1
(x_find_modifier_meanings): Fix !X11R4 code to use dpyinfo.
Richard M. Stallman <rms@gnu.org>
parents:
13782
diff
changeset
|
5575 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
|
5576 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
|
5577 #endif |
|
adaf588e32a6
* xterm.c (x_find_modifier_meanings): XDisplayKeycodes only
Jim Blandy <jimb@redhat.com>
parents:
2064
diff
changeset
|
5578 |
|
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5579 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
|
5580 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
|
5581 &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
|
5582 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
|
5583 |
|
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
5584 /* 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
|
5585 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
|
5586 { |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5587 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
|
5588 |
|
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5589 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
|
5590 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
|
5591 { |
|
10287
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
5592 KeyCode code |
|
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
5593 = 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
|
5594 |
|
6560
a071babfa9ea
(x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents:
6521
diff
changeset
|
5595 /* Zeroes are used for filler. Skip them. */ |
|
a071babfa9ea
(x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents:
6521
diff
changeset
|
5596 if (code == 0) |
|
a071babfa9ea
(x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents:
6521
diff
changeset
|
5597 continue; |
|
a071babfa9ea
(x_find_modifier_meanings): Skip zero entries.
Karl Heuer <kwzh@gnu.org>
parents:
6521
diff
changeset
|
5598 |
|
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5599 /* 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
|
5600 { |
|
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5601 int code_col; |
|
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5602 |
|
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5603 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
|
5604 { |
|
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5605 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
|
5606 |
|
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5607 switch (sym) |
|
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5608 { |
|
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5609 case XK_Meta_L: |
|
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5610 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
|
5611 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
|
5612 break; |
|
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5613 |
|
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5614 case XK_Alt_L: |
|
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5615 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
|
5616 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
|
5617 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
|
5618 |
|
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
|
5619 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
|
5620 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
|
5621 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
|
5622 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
|
5623 |
|
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
|
5624 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
|
5625 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
|
5626 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
|
5627 break; |
|
1436
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
5628 |
|
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
5629 case XK_Shift_Lock: |
|
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
5630 /* 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
|
5631 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
|
5632 dpyinfo->shift_lock_mask = LockMask; |
|
1436
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
5633 break; |
|
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5634 } |
|
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5635 } |
|
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5636 } |
|
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5637 } |
|
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5638 } |
|
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5639 |
|
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5640 /* 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
|
5641 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
|
5642 { |
|
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5643 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
|
5644 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
|
5645 } |
|
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5646 |
|
2923
c8997402dd6b
(x_find_modifier_meanings): If some keys are meta and alt,
Richard M. Stallman <rms@gnu.org>
parents:
2882
diff
changeset
|
5647 /* 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
|
5648 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
|
5649 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
|
5650 { |
|
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5651 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
|
5652 } |
|
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
5653 |
|
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5654 XFree ((char *) syms); |
|
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5655 XFreeModifiermap (mods); |
|
1279
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5656 } |
|
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
5657 |
|
2661
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
5658 /* 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
|
5659 Emacs uses. */ |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5660 |
|
1530
a7f8a1fe258e
* xterm.c (x_convert_modifiers): Declare this to return an
Jim Blandy <jimb@redhat.com>
parents:
1436
diff
changeset
|
5661 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
|
5662 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
|
5663 struct x_display_info *dpyinfo; |
| 286 | 5664 unsigned int state; |
| 5665 { | |
|
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5666 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
|
5667 | ((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
|
5668 | ((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
|
5669 | ((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
|
5670 | ((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
|
5671 | ((state & dpyinfo->hyper_mod_mask) ? hyper_modifier : 0)); |
| 286 | 5672 } |
| 5673 | |
|
2661
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
5674 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
|
5675 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
|
5676 struct x_display_info *dpyinfo; |
|
2661
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
5677 unsigned int state; |
|
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
5678 { |
|
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
5679 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
|
5680 | ((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
|
5681 | ((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
|
5682 | ((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
|
5683 | ((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
|
5684 | ((state & meta_modifier) ? dpyinfo->meta_mod_mask : 0)); |
|
2661
77f1457d000e
Implement extra_keyboard_modifiers properly.
Jim Blandy <jimb@redhat.com>
parents:
2474
diff
changeset
|
5685 } |
|
12172
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5686 |
|
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5687 /* Convert a keysym to its name. */ |
|
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5688 |
|
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5689 char * |
|
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5690 x_get_keysym_name (keysym) |
|
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5691 KeySym keysym; |
|
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5692 { |
|
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5693 char *value; |
|
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5694 |
|
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5695 BLOCK_INPUT; |
|
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5696 value = XKeysymToString (keysym); |
|
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5697 UNBLOCK_INPUT; |
|
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5698 |
|
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5699 return value; |
|
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
5700 } |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5701 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5702 |
|
3585
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5703 |
|
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5704 /* Mouse clicks and mouse movement. Rah. */ |
|
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5705 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5706 /* 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
|
5707 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
|
5708 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
|
5709 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
|
5710 |
|
6023
67aa546e4ff1
(construct_menu_click): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents:
6022
diff
changeset
|
5711 void |
|
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5712 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
|
5713 FRAME_PTR f; |
|
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5714 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
|
5715 register int *x, *y; |
|
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5716 XRectangle *bounds; |
|
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5717 int noclip; |
|
3585
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5718 { |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5719 /* 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
|
5720 even for negative values. */ |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5721 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
|
5722 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
|
5723 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
|
5724 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
|
5725 |
|
3585
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5726 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
|
5727 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
|
5728 |
|
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5729 if (bounds) |
|
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5730 { |
|
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
5731 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
|
5732 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
|
5733 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
|
5734 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
|
5735 } |
|
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5736 |
|
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5737 if (!noclip) |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5738 { |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5739 if (pix_x < 0) |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5740 pix_x = 0; |
|
16301
a02555b4b2b9
(x_scroll_bar_create, x_scroll_bar_move):
Richard M. Stallman <rms@gnu.org>
parents:
16251
diff
changeset
|
5741 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
|
5742 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
|
5743 |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5744 if (pix_y < 0) |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5745 pix_y = 0; |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5746 else if (pix_y > f->height) |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5747 pix_y = f->height; |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5748 } |
|
3585
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5749 |
|
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5750 *x = pix_x; |
|
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5751 *y = pix_y; |
|
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5752 } |
|
19aab2d09a4d
* xterm.c (x_is_vendor_fkey): New function.
Jim Blandy <jimb@redhat.com>
parents:
3558
diff
changeset
|
5753 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5754 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5755 /* 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
|
5756 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
|
5757 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
|
5758 return 0. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5759 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5760 int |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5761 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
|
5762 struct window *w; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5763 int hpos, vpos; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5764 int *frame_x, *frame_y; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5765 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5766 int success_p; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5767 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5768 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
|
5769 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
|
5770 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5771 if (display_completed) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5772 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5773 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
|
5774 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
|
5775 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
|
5776 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5777 *frame_y = row->y; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5778 *frame_x = row->x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5779 while (glyph < end) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5780 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5781 *frame_x += glyph->pixel_width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5782 ++glyph; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5783 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5784 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5785 success_p = 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5786 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5787 else |
|
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 *frame_y = *frame_x = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5790 success_p = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5791 } |
|
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 *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
|
5794 *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
|
5795 return success_p; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5796 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5797 |
|
6055
a9f61727a90c
(construct_mouse_click): Don't convert to glyph units.
Richard M. Stallman <rms@gnu.org>
parents:
6023
diff
changeset
|
5798 |
| 286 | 5799 /* Prepare a mouse-event in *RESULT for placement in the input queue. |
| 5800 | |
| 5801 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
|
5802 the mouse. */ |
| 286 | 5803 |
| 5804 static Lisp_Object | |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
5805 construct_mouse_click (result, event, f) |
| 286 | 5806 struct input_event *result; |
| 5807 XButtonEvent *event; | |
| 771 | 5808 struct frame *f; |
| 286 | 5809 { |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
5810 /* Make the event type no_event; we'll change that when we decide |
| 286 | 5811 otherwise. */ |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
5812 result->kind = mouse_click; |
|
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5813 result->code = event->button - Button1; |
| 708 | 5814 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
|
5815 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
|
5816 event->state) |
|
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5817 | (event->type == ButtonRelease |
|
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
5818 ? up_modifier |
|
1324
44215417cf6e
* xterm.c (x_find_modifier_meanings): If there are no
Jim Blandy <jimb@redhat.com>
parents:
1279
diff
changeset
|
5819 : down_modifier)); |
| 286 | 5820 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5821 XSETINT (result->x, event->x); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5822 XSETINT (result->y, event->y); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5823 XSETFRAME (result->frame_or_window, f); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5824 return Qnil; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5825 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5826 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5827 #if 0 /* This function isn't called. --gerd */ |
|
6022
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
5828 |
|
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
5829 /* Prepare a menu-event in *RESULT for placement in the input queue. */ |
|
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
5830 |
|
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
5831 static Lisp_Object |
|
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
5832 construct_menu_click (result, event, f) |
|
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
5833 struct input_event *result; |
|
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
5834 XButtonEvent *event; |
|
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
5835 struct frame *f; |
|
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
5836 { |
|
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
5837 /* Make the event type no_event; we'll change that when we decide |
|
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
5838 otherwise. */ |
|
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
5839 result->kind = mouse_click; |
|
17371
97283cd93432
(construct_menu_click, note_mouse_highlight, fast_find_position):
Karl Heuer <kwzh@gnu.org>
parents:
17316
diff
changeset
|
5840 result->code = event->button - Button1; |
|
6022
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
5841 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
|
5842 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
|
5843 event->state) |
|
6022
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
5844 | (event->type == ButtonRelease |
|
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
5845 ? up_modifier |
|
6022
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
5846 : down_modifier)); |
|
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
5847 |
|
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
5848 XSETINT (result->x, event->x); |
|
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
5849 XSETINT (result->y, -1); |
|
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
5850 XSETFRAME (result->frame_or_window, f); |
|
6022
713d4d840a11
(x_had_errors_p): New function.
Richard M. Stallman <rms@gnu.org>
parents:
6010
diff
changeset
|
5851 } |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5852 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5853 #endif /* 0 */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5854 |
|
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
5855 |
| 429 | 5856 /* Function to report a mouse movement to the mainstream Emacs code. |
| 5857 The input handler calls this. | |
| 5858 | |
| 5859 We have received a mouse movement event, which is given in *event. | |
| 5860 If the mouse is over a different glyph than it was last time, tell | |
| 5861 the mainstream emacs code by setting mouse_moved. If not, ask for | |
| 5862 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
|
5863 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5864 static XMotionEvent last_mouse_motion_event; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5865 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
|
5866 |
| 429 | 5867 static void |
|
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
5868 note_mouse_movement (frame, event) |
| 771 | 5869 FRAME_PTR frame; |
| 429 | 5870 XMotionEvent *event; |
| 5871 { | |
| 732 | 5872 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
|
5873 last_mouse_motion_event = *event; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5874 XSETFRAME (last_mouse_motion_frame, frame); |
| 732 | 5875 |
|
7680
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
5876 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
|
5877 { |
|
12530
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
5878 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
|
5879 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
|
5880 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
|
5881 } |
|
8212755ff793
(note_mouse_movement): Use frame's window in XQueryPointer.
Richard M. Stallman <rms@gnu.org>
parents:
7651
diff
changeset
|
5882 |
| 429 | 5883 /* 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
|
5884 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
|
5885 || 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
|
5886 || 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
|
5887 || 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
|
5888 { |
|
12530
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
5889 frame->mouse_moved = 1; |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
5890 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
|
5891 note_mouse_highlight (frame, event->x, event->y); |
| 429 | 5892 } |
| 5893 } | |
| 5894 | |
|
6644
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
5895 /* 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
|
5896 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5897 int disable_mouse_highlight; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5898 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5899 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5900 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5901 /************************************************************************ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5902 Mouse Face |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5903 ************************************************************************/ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5904 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5905 /* 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
|
5906 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
|
5907 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
|
5908 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
|
5909 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
|
5910 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
|
5911 date. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5912 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5913 static struct glyph * |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5914 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
|
5915 struct window *w; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5916 int x, y; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5917 int *hpos, *vpos, *area; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5918 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5919 struct glyph *glyph, *end; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5920 struct glyph_row *row; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5921 int x0, i, left_area_width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5922 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5923 /* 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
|
5924 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
|
5925 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5926 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
|
5927 if (!row->enabled_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5928 return NULL; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5929 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
|
5930 break; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5931 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5932 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5933 *vpos = i; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5934 *hpos = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5935 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5936 /* 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
|
5937 if (i == w->current_matrix->nrows) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5938 return NULL; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5939 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5940 /* Get the glyph area containing X. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5941 if (w->pseudo_window_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5942 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5943 *area = TEXT_AREA; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5944 x0 = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5945 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5946 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5947 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5948 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
|
5949 if (x < left_area_width) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5950 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5951 *area = LEFT_MARGIN_AREA; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5952 x0 = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5953 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5954 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
|
5955 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5956 *area = TEXT_AREA; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5957 x0 = row->x + left_area_width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5958 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5959 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5960 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5961 *area = RIGHT_MARGIN_AREA; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5962 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
|
5963 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5964 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5965 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5966 /* Find glyph containing X. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5967 glyph = row->glyphs[*area]; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5968 end = glyph + row->used[*area]; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5969 while (glyph < end) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5970 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5971 if (x < x0 + glyph->pixel_width) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5972 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5973 if (w->pseudo_window_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5974 break; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5975 else if (BUFFERP (glyph->object)) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5976 break; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5977 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5978 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5979 x0 += glyph->pixel_width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5980 ++glyph; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5981 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5982 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5983 if (glyph == end) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5984 return NULL; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5985 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5986 *hpos = glyph - row->glyphs[*area]; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5987 return glyph; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5988 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5989 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5990 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5991 /* 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
|
5992 Takes pseudo-windows into account. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5993 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5994 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5995 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
|
5996 struct window *w; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5997 int *x, *y; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5998 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
5999 if (w->pseudo_window_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6000 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6001 /* 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
|
6002 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
|
6003 struct frame *f = XFRAME (w->frame); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6004 *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
|
6005 *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
|
6006 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6007 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6008 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6009 *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
|
6010 *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
|
6011 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6012 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6013 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6014 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6015 /* 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
|
6016 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
|
6017 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
|
6018 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
|
6019 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
|
6020 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6021 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6022 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
|
6023 struct window *w; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6024 int x, mode_line_p; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6025 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6026 struct frame *f = XFRAME (w->frame); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6027 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
|
6028 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
|
6029 struct glyph_row *row; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6030 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6031 if (mode_line_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6032 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
|
6033 else |
| 25546 | 6034 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
|
6035 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6036 if (row->enabled_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6037 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6038 struct glyph *glyph, *end; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6039 Lisp_Object help, map; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6040 int x0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6041 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6042 /* Find the glyph under X. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6043 glyph = row->glyphs[TEXT_AREA]; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6044 end = glyph + row->used[TEXT_AREA]; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6045 x0 = - (FRAME_LEFT_SCROLL_BAR_WIDTH (f) * CANON_X_UNIT (f) |
| 25465 | 6046 + 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
|
6047 while (glyph < end |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6048 && x >= x0 + glyph->pixel_width) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6049 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6050 x0 += glyph->pixel_width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6051 ++glyph; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6052 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6053 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6054 if (glyph < end |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6055 && STRINGP (glyph->object) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6056 && XSTRING (glyph->object)->intervals |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6057 && glyph->charpos >= 0 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6058 && glyph->charpos < XSTRING (glyph->object)->size) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6059 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6060 /* 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
|
6061 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
|
6062 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
|
6063 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
|
6064 Qhelp_echo, glyph->object); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6065 if (STRINGP (help)) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6066 help_echo = help; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6067 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6068 /* 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
|
6069 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
|
6070 Qlocal_map, glyph->object); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6071 if (!NILP (Fkeymapp (map))) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6072 cursor = f->output_data.x->nontext_cursor; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6073 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6074 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6075 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6076 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
|
6077 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6078 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6079 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6080 /* 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
|
6081 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
|
6082 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
|
6083 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
|
6084 |
|
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6085 static void |
|
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6086 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
|
6087 struct frame *f; |
|
11915
e2ab839155e1
(XTflash): Use pointers as args to select.
Karl Heuer <kwzh@gnu.org>
parents:
11904
diff
changeset
|
6088 int x, y; |
|
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6089 { |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6090 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
|
6091 int portion; |
|
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6092 Lisp_Object window; |
|
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6093 struct window *w; |
|
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6094 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6095 /* 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
|
6096 #ifdef USE_X_TOOLKIT |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6097 if (popup_activated ()) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6098 return; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6099 #endif |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6100 |
|
6644
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
6101 if (disable_mouse_highlight) |
|
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
6102 return; |
|
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
6103 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6104 dpyinfo->mouse_face_mouse_x = x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6105 dpyinfo->mouse_face_mouse_y = y; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6106 dpyinfo->mouse_face_mouse_frame = f; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6107 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6108 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
|
6109 return; |
|
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6110 |
|
6660
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
6111 if (gc_in_progress) |
|
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
6112 { |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6113 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
|
6114 return; |
|
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
6115 } |
|
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
6116 |
|
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6117 /* Which window is that in? */ |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6118 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
|
6119 |
|
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6120 /* 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
|
6121 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
|
6122 clear_mouse_face (dpyinfo); |
|
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 /* Not on a window -> return. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6125 if (!WINDOWP (window)) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6126 return; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6127 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6128 /* Convert to window-relative pixel coordinates. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6129 w = XWINDOW (window); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6130 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
|
6131 |
|
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6132 /* 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
|
6133 buffer. */ |
|
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6134 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
|
6135 { |
|
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6136 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
|
6137 return; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6138 } |
|
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 (portion == 1 || portion == 3) |
|
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 /* 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
|
6143 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
|
6144 return; |
|
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 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6147 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
|
6148 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
|
6149 |
|
6791
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
6150 /* 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
|
6151 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
|
6152 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
|
6153 portion == 0 |
|
6791
7036e4fd549f
(dumpglyphs): Clear any extra pixel rows below the text.
Richard M. Stallman <rms@gnu.org>
parents:
6767
diff
changeset
|
6154 && 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
|
6155 && 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
|
6156 && (XFASTINT (w->last_overlay_modified) |
|
97283cd93432
(construct_menu_click, note_mouse_highlight, fast_find_position):
Karl Heuer <kwzh@gnu.org>
parents:
17316
diff
changeset
|
6157 == 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
|
6158 { |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6159 int hpos, vpos, pos, i, area; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6160 struct glyph *glyph; |
|
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 /* Find the glyph under X/Y. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6163 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
|
6164 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6165 /* 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
|
6166 if (glyph == NULL |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6167 || area != TEXT_AREA |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6168 || !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
|
6169 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6170 clear_mouse_face (dpyinfo); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6171 return; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6172 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6173 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6174 pos = glyph->charpos; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6175 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
|
6176 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6177 /* 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
|
6178 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6179 Lisp_Object mouse_face, overlay, position; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6180 Lisp_Object *overlay_vec; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6181 int len, noverlays; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6182 struct buffer *obuf; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6183 int obegv, ozv; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6184 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6185 /* If 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
|
6186 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
|
6187 return; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6188 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6189 /* 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
|
6190 overlays_at and compute_char_face. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6191 obuf = current_buffer; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6192 current_buffer = XBUFFER (w->buffer); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6193 obegv = BEGV; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6194 ozv = ZV; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6195 BEGV = BEG; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6196 ZV = Z; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6197 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6198 /* 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
|
6199 XSETINT (position, pos); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6200 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6201 /* 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
|
6202 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
|
6203 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
|
6204 len = 10; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6205 overlay_vec = (Lisp_Object *) alloca (len * sizeof (Lisp_Object)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6206 noverlays = overlays_at (pos, 0, &overlay_vec, &len, NULL, NULL); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6207 if (noverlays > len) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6208 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6209 len = noverlays; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6210 overlay_vec = (Lisp_Object *) alloca (len * sizeof (Lisp_Object)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6211 noverlays = overlays_at (pos, 0, &overlay_vec, &len, NULL, NULL); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6212 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6213 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6214 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
|
6215 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6216 /* Check mouse-face highlighting. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6217 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
|
6218 && vpos >= dpyinfo->mouse_face_beg_row |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6219 && vpos <= dpyinfo->mouse_face_end_row |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6220 && (vpos > dpyinfo->mouse_face_beg_row |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6221 || hpos >= dpyinfo->mouse_face_beg_col) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6222 && (vpos < dpyinfo->mouse_face_end_row |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6223 || hpos < dpyinfo->mouse_face_end_col |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6224 || dpyinfo->mouse_face_past_end))) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6225 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6226 /* 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
|
6227 clear_mouse_face (dpyinfo); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6228 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6229 /* 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
|
6230 overlay = Qnil; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6231 for (i = 0; i < noverlays; i++) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6232 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6233 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
|
6234 if (!NILP (mouse_face)) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6235 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6236 overlay = overlay_vec[i]; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6237 break; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6238 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6239 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6240 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6241 /* 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
|
6242 if (NILP (overlay)) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6243 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
|
6244 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6245 /* Handle the overlay case. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6246 if (! NILP (overlay)) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6247 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6248 /* 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
|
6249 should be active. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6250 Lisp_Object before, after; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6251 int ignore; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6252 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6253 before = Foverlay_start (overlay); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6254 after = Foverlay_end (overlay); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6255 /* 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
|
6256 fast_find_position (w, XFASTINT (before), |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6257 &dpyinfo->mouse_face_beg_col, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6258 &dpyinfo->mouse_face_beg_row, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6259 &dpyinfo->mouse_face_beg_x, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6260 &dpyinfo->mouse_face_beg_y); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6261 dpyinfo->mouse_face_past_end |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6262 = !fast_find_position (w, XFASTINT (after), |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6263 &dpyinfo->mouse_face_end_col, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6264 &dpyinfo->mouse_face_end_row, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6265 &dpyinfo->mouse_face_end_x, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6266 &dpyinfo->mouse_face_end_y); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6267 dpyinfo->mouse_face_window = window; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6268 dpyinfo->mouse_face_face_id |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6269 = 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
|
6270 &ignore, pos + 1, 1); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6271 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6272 /* Display it as active. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6273 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
|
6274 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6275 /* Handle the text property case. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6276 else if (! NILP (mouse_face)) |
|
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 /* 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
|
6279 should be active. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6280 Lisp_Object before, after, beginning, end; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6281 int ignore; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6282 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6283 beginning = Fmarker_position (w->start); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6284 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
|
6285 - XFASTINT (w->window_end_pos))); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6286 before |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6287 = 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
|
6288 Qmouse_face, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6289 w->buffer, beginning); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6290 after |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6291 = 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
|
6292 w->buffer, end); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6293 /* 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
|
6294 fast_find_position (w, XFASTINT (before), |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6295 &dpyinfo->mouse_face_beg_col, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6296 &dpyinfo->mouse_face_beg_row, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6297 &dpyinfo->mouse_face_beg_x, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6298 &dpyinfo->mouse_face_beg_y); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6299 dpyinfo->mouse_face_past_end |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6300 = !fast_find_position (w, XFASTINT (after), |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6301 &dpyinfo->mouse_face_end_col, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6302 &dpyinfo->mouse_face_end_row, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6303 &dpyinfo->mouse_face_end_x, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6304 &dpyinfo->mouse_face_end_y); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6305 dpyinfo->mouse_face_window = window; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6306 dpyinfo->mouse_face_face_id |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6307 = 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
|
6308 &ignore, pos + 1, 1); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6309 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6310 /* Display it as active. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6311 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
|
6312 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6313 } |
|
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 /* Look for a `help-echo' property. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6316 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6317 Lisp_Object help; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6318 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6319 /* Check overlays first. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6320 help = Qnil; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6321 for (i = 0; i < noverlays && !STRINGP (help); ++i) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6322 help = Foverlay_get (overlay_vec[i], Qhelp_echo); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6323 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6324 /* Try text properties. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6325 if (!STRINGP (help) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6326 && ((STRINGP (glyph->object) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6327 && glyph->charpos >= 0 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6328 && glyph->charpos < XSTRING (glyph->object)->size) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6329 || (BUFFERP (glyph->object) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6330 && glyph->charpos >= BEGV |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6331 && glyph->charpos < ZV))) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6332 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
|
6333 Qhelp_echo, glyph->object); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6334 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6335 if (STRINGP (help)) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6336 help_echo = help; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6337 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6338 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6339 BEGV = obegv; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6340 ZV = ozv; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6341 current_buffer = obuf; |
|
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 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6344 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6345 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6346 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6347 redo_mouse_highlight () |
|
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 if (!NILP (last_mouse_motion_frame) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6350 && 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
|
6351 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
|
6352 last_mouse_motion_event.x, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6353 last_mouse_motion_event.y); |
|
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 |
|
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6357 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6358 /*********************************************************************** |
|
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6359 Tool-bars |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6360 ***********************************************************************/ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6361 |
|
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6362 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
|
6363 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
|
6364 |
|
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6365 /* 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
|
6366 or -1. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6367 |
|
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6368 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
|
6369 |
|
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6370 |
|
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6371 /* 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
|
6372 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
|
6373 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
|
6374 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
|
6375 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
|
6376 |
|
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6377 -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
|
6378 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
|
6379 1 otherwise. */ |
|
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6380 |
|
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6381 static int |
|
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6382 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
|
6383 struct frame *f; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6384 int x, y; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6385 struct glyph **glyph; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6386 int *hpos, *vpos, *prop_idx; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6387 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6388 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
|
6389 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
|
6390 int area; |
|
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 /* Find the glyph under X/Y. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6393 *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
|
6394 if (*glyph == NULL) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6395 return -1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6396 |
|
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6397 /* 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
|
6398 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
|
6399 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
|
6400 return -1; |
|
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 /* 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
|
6403 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
|
6404 && *vpos >= dpyinfo->mouse_face_beg_row |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6405 && *vpos <= dpyinfo->mouse_face_end_row |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6406 && (*vpos > dpyinfo->mouse_face_beg_row |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6407 || *hpos >= dpyinfo->mouse_face_beg_col) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6408 && (*vpos < dpyinfo->mouse_face_end_row |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6409 || *hpos < dpyinfo->mouse_face_end_col |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6410 || dpyinfo->mouse_face_past_end)) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6411 return 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6412 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6413 return 1; |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6416 |
|
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6417 /* 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
|
6418 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
|
6419 or ButtonRelase. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6420 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6421 static void |
|
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6422 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
|
6423 struct frame *f; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6424 XButtonEvent *button_event; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6425 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6426 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
|
6427 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
|
6428 int hpos, vpos, prop_idx; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6429 struct glyph *glyph; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6430 Lisp_Object enabled_p; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6431 int x = button_event->x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6432 int y = button_event->y; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6433 |
|
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6434 /* 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
|
6435 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
|
6436 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
|
6437 return; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6438 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6439 /* 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
|
6440 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
|
6441 ->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
|
6442 if (NILP (enabled_p)) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6443 return; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6444 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6445 if (button_event->type == ButtonPress) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6446 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6447 /* Show item in pressed state. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6448 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
|
6449 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
|
6450 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
|
6451 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6452 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6453 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6454 Lisp_Object key, frame; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6455 struct input_event event; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6456 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6457 /* Show item in released state. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6458 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
|
6459 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
|
6460 |
|
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6461 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
|
6462 ->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
|
6463 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6464 XSETFRAME (frame, f); |
|
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6465 event.kind = TOOL_BAR_EVENT; |
|
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6466 event.frame_or_window = Fcons (frame, Fcons (Qtool_bar, Qnil)); |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6467 kbd_buffer_store_event (&event); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6468 |
|
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6469 event.kind = TOOL_BAR_EVENT; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6470 event.frame_or_window = Fcons (frame, key); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6471 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
|
6472 button_event->state); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6473 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
|
6474 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
|
6475 } |
|
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6476 } |
|
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6477 |
|
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6478 |
|
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6479 /* 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
|
6480 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
|
6481 note_mouse_highlight. */ |
|
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 static void |
|
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6484 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
|
6485 struct frame *f; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6486 int x, y; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6487 { |
|
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6488 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
|
6489 struct window *w = XWINDOW (window); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6490 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
|
6491 int hpos, vpos; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6492 struct glyph *glyph; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6493 struct glyph_row *row; |
|
25716
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
6494 int i; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6495 Lisp_Object enabled_p; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6496 int prop_idx; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6497 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
|
6498 int mouse_down_p, rc; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6499 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6500 /* 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
|
6501 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
|
6502 if (x <= 0 || y <= 0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6503 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6504 clear_mouse_face (dpyinfo); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6505 return; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6506 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6507 |
|
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6508 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
|
6509 if (rc < 0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6510 { |
|
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6511 /* Not on tool-bar item. */ |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6512 clear_mouse_face (dpyinfo); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6513 return; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6514 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6515 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
|
6516 /* 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
|
6517 goto set_help_echo; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6518 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6519 clear_mouse_face (dpyinfo); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6520 |
|
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6521 /* 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
|
6522 mouse_down_p = (dpyinfo->grabbed |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6523 && f == last_mouse_frame |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6524 && FRAME_LIVE_P (f)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6525 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
|
6526 && 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
|
6527 return; |
|
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 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
|
6530 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
|
6531 |
|
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6532 /* 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
|
6533 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
|
6534 ->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
|
6535 if (!NILP (enabled_p)) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6536 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6537 /* 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
|
6538 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
|
6539 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
|
6540 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
|
6541 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
|
6542 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6543 /* 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
|
6544 dpyinfo->mouse_face_beg_col = hpos; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6545 dpyinfo->mouse_face_beg_row = vpos; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6546 dpyinfo->mouse_face_beg_x = x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6547 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
|
6548 dpyinfo->mouse_face_past_end = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6549 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6550 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
|
6551 dpyinfo->mouse_face_end_row = vpos; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6552 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
|
6553 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
|
6554 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
|
6555 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
|
6556 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6557 /* Display it as active. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6558 show_mouse_face (dpyinfo, draw); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6559 dpyinfo->mouse_face_image_state = draw; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6560 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6561 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6562 set_help_echo: |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6563 |
|
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6564 /* 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
|
6565 XTread_socket does the rest. */ |
|
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6566 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
|
6567 ->contents[prop_idx + TOOL_BAR_ITEM_HELP]); |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6568 if (!STRINGP (help_echo)) |
|
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
6569 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
|
6570 ->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
|
6571 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6572 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6573 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6574 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6575 /* 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
|
6576 *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
|
6577 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
|
6578 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
|
6579 last line in W. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6580 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6581 static int |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6582 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
|
6583 struct window *w; |
|
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6584 int pos; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6585 int *hpos, *vpos, *x, *y; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6586 { |
|
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6587 int i; |
|
6644
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
6588 int lastcol; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6589 int maybe_next_line_p = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6590 int line_start_position; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6591 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
|
6592 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
|
6593 struct glyph_row *best_row = row; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6594 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
|
6595 int current_x; |
|
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 while (row->y < yb) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6598 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6599 if (row->used[TEXT_AREA]) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6600 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
|
6601 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6602 line_start_position = 0; |
|
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 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
|
6605 break; |
|
9762
567e3670acc3
(fast_find_position): Special case if POS is end of buffer.
Richard M. Stallman <rms@gnu.org>
parents:
9741
diff
changeset
|
6606 /* 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
|
6607 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
|
6608 else if (line_start_position == pos |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6609 && pos == BUF_ZV (XBUFFER (w->buffer))) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6610 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6611 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
|
6612 break; |
|
567e3670acc3
(fast_find_position): Special case if POS is end of buffer.
Richard M. Stallman <rms@gnu.org>
parents:
9741
diff
changeset
|
6613 } |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6614 else if (line_start_position > 0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6615 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6616 best_row = row; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6617 best_row_vpos = row_vpos; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6618 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6619 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6620 ++row; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6621 ++row_vpos; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6622 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6623 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6624 /* 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
|
6625 lastcol = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6626 current_x = best_row->x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6627 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
|
6628 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6629 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
|
6630 int charpos; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6631 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6632 charpos = glyph->charpos; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6633 if (charpos == pos) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6634 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6635 *hpos = i; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6636 *vpos = best_row_vpos; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6637 *x = current_x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6638 *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
|
6639 return 1; |
|
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
6640 } |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6641 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
|
6642 break; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6643 else if (charpos > 0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6644 lastcol = i; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6645 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6646 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
|
6647 } |
|
8e2379ce4fcb
(fast_find_position): Always return coords within the window.
Richard M. Stallman <rms@gnu.org>
parents:
6631
diff
changeset
|
6648 |
|
9762
567e3670acc3
(fast_find_position): Special case if POS is end of buffer.
Richard M. Stallman <rms@gnu.org>
parents:
9741
diff
changeset
|
6649 /* 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
|
6650 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
|
6651 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
|
6652 if (maybe_next_line_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6653 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6654 ++best_row; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6655 ++best_row_vpos; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6656 lastcol = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6657 current_x = best_row->x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6658 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6659 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6660 *vpos = best_row_vpos; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6661 *hpos = lastcol + 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6662 *x = current_x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6663 *y = best_row->y; |
|
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6664 return 0; |
|
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6665 } |
|
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6666 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6667 |
|
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6668 /* 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
|
6669 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
|
6670 |
|
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6671 static void |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6672 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
|
6673 struct x_display_info *dpyinfo; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6674 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
|
6675 { |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
6676 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
|
6677 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
|
6678 int i; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6679 int cursor_off_p = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6680 struct cursor_pos saved_cursor; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6681 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6682 saved_cursor = output_cursor; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6683 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6684 /* 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
|
6685 to do anything. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6686 if (w->current_matrix == NULL) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6687 goto set_x_cursor; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6688 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6689 /* 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
|
6690 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
|
6691 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
|
6692 goto set_x_cursor; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6693 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6694 set_output_cursor (&w->phys_cursor); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6695 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6696 /* 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
|
6697 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
|
6698 i <= dpyinfo->mouse_face_end_row; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6699 i++) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6700 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6701 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
|
6702 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
|
6703 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6704 /* 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
|
6705 if (!row->enabled_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6706 continue; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6707 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6708 /* 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
|
6709 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
|
6710 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6711 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
|
6712 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
|
6713 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6714 else |
|
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 start_hpos = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6717 start_x = 0; |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6720 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
|
6721 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
|
6722 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6723 end_hpos = row->used[TEXT_AREA]; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6724 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6725 /* 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
|
6726 cursor off. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6727 if (!w->pseudo_window_p |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6728 && i == output_cursor.vpos |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6729 && output_cursor.hpos >= start_hpos - 1 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6730 && output_cursor.hpos <= end_hpos) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6731 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6732 x_update_window_cursor (w, 0); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6733 cursor_off_p = 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6734 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6735 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6736 if (end_hpos > start_hpos) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6737 x_draw_glyphs (w, start_x, row, updated_area, |
|
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
6738 start_hpos, end_hpos, draw, NULL, NULL, 0); |
|
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6739 } |
|
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6740 |
|
6660
cb14d76e993c
(note_mouse_highlight): Do nothing if gc_in_progress.
Richard M. Stallman <rms@gnu.org>
parents:
6649
diff
changeset
|
6741 /* 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
|
6742 if (cursor_off_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6743 x_display_cursor (w, 1, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6744 output_cursor.hpos, output_cursor.vpos, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6745 output_cursor.x, output_cursor.y); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6746 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6747 output_cursor = saved_cursor; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6748 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6749 set_x_cursor: |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6750 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6751 /* Change the mouse cursor. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6752 if (draw == DRAW_NORMAL_TEXT) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6753 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
|
6754 f->output_data.x->text_cursor); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6755 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
|
6756 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
|
6757 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
|
6758 else |
|
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
6759 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
|
6760 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
|
6761 } |
|
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6762 |
|
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6763 /* 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
|
6764 Redraw it un-highlighted first. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6765 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6766 void |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
6767 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
|
6768 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
|
6769 { |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6770 if (tip_frame) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6771 return; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6772 |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
6773 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
|
6774 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
|
6775 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
6776 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
|
6777 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
|
6778 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
|
6779 } |
|
16491
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6780 |
|
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6781 /* 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
|
6782 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
|
6783 |
| 21514 | 6784 void |
|
16491
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6785 cancel_mouse_face (f) |
|
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6786 FRAME_PTR f; |
|
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6787 { |
|
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6788 Lisp_Object window; |
|
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6789 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
|
6790 |
|
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6791 window = dpyinfo->mouse_face_window; |
|
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6792 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
|
6793 { |
|
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6794 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
|
6795 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
|
6796 dpyinfo->mouse_face_window = Qnil; |
|
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6797 } |
|
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
6798 } |
|
6616
951c8941b931
[INCLUDED_FCNTL]: Don't include fcntl.h again.
Richard M. Stallman <rms@gnu.org>
parents:
6560
diff
changeset
|
6799 |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
6800 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
|
6801 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
|
6802 |
| 429 | 6803 /* 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
|
6804 *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
|
6805 |
|
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
6806 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
|
6807 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
|
6808 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
|
6809 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
|
6810 |
|
11436
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
6811 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
|
6812 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
|
6813 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
|
6814 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6815 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
|
6816 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
|
6817 |
|
3669
fd4187a96445
(XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents:
3639
diff
changeset
|
6818 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
|
6819 |
| 429 | 6820 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
|
6821 movement. */ |
| 429 | 6822 |
| 6823 static void | |
|
11122
ce63fb361ae9
(XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents:
11015
diff
changeset
|
6824 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
|
6825 FRAME_PTR *fp; |
|
11122
ce63fb361ae9
(XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents:
11015
diff
changeset
|
6826 int insist; |
|
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6827 Lisp_Object *bar_window; |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
6828 enum scroll_bar_part *part; |
| 429 | 6829 Lisp_Object *x, *y; |
| 732 | 6830 unsigned long *time; |
| 429 | 6831 { |
|
3669
fd4187a96445
(XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents:
3639
diff
changeset
|
6832 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
|
6833 |
| 429 | 6834 BLOCK_INPUT; |
| 6835 | |
|
20180
bfbf6a2939a3
(XTmouse_position): Handle INSIST < 0.
Karl Heuer <kwzh@gnu.org>
parents:
19447
diff
changeset
|
6836 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
|
6837 x_scroll_bar_report_motion (fp, bar_window, part, x, y, time); |
| 429 | 6838 else |
| 6839 { | |
|
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6840 Window root; |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6841 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
|
6842 |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6843 Window dummy_window; |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6844 int dummy; |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6845 |
|
12530
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
6846 Lisp_Object frame, tail; |
|
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
6847 |
|
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
6848 /* 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
|
6849 FOR_EACH_FRAME (tail, frame) |
|
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
6850 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
|
6851 XFRAME (frame)->mouse_moved = 0; |
|
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
6852 |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
6853 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
|
6854 |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6855 /* 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
|
6856 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
|
6857 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
|
6858 |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6859 /* 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
|
6860 &root, |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6861 |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6862 /* 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
|
6863 a different screen. */ |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6864 &dummy_window, |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6865 |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6866 /* The position on that root window. */ |
|
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
6867 &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
|
6868 |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6869 /* 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
|
6870 &dummy, &dummy, |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6871 |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6872 /* 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
|
6873 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
|
6874 (unsigned int *) &dummy); |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6875 |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6876 /* 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
|
6877 containing the pointer. */ |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6878 { |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6879 Window win, child; |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6880 int win_x, win_y; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6881 int parent_x = 0, parent_y = 0; |
|
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
6882 int count; |
|
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6883 |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6884 win = root; |
|
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6885 |
|
11436
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
6886 /* 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
|
6887 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
|
6888 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
|
6889 |
|
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
6890 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
|
6891 |
|
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
6892 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
|
6893 && 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
|
6894 { |
|
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6895 /* 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
|
6896 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
|
6897 XTranslateCoordinates (FRAME_X_DISPLAY (*fp), |
|
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6898 |
|
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6899 /* From-window, to-window. */ |
|
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6900 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
|
6901 |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6902 /* 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
|
6903 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
|
6904 |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6905 /* Child of win. */ |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6906 &child); |
|
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6907 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
|
6908 } |
|
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6909 else |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6910 { |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6911 while (1) |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6912 { |
|
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
6913 XTranslateCoordinates (FRAME_X_DISPLAY (*fp), |
|
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6914 |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6915 /* From-window, to-window. */ |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6916 root, win, |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6917 |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6918 /* From-position, to-position. */ |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6919 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
|
6920 |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6921 /* Child of win. */ |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6922 &child); |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6923 |
|
13627
8873aa3451dd
(XTmouse_position): Exit the loop if child == win.
Richard M. Stallman <rms@gnu.org>
parents:
13598
diff
changeset
|
6924 if (child == None || child == win) |
|
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6925 break; |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6926 |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6927 win = child; |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6928 parent_x = win_x; |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6929 parent_y = win_y; |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6930 } |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6931 |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6932 /* Now we know that: |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6933 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
|
6934 (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
|
6935 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
|
6936 (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
|
6937 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
|
6938 (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
|
6939 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
|
6940 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
|
6941 never use them in that case.) */ |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6942 |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
6943 /* 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
|
6944 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
|
6945 } |
|
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
6946 |
|
11436
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
6947 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
|
6948 f1 = 0; |
|
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
6949 |
|
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
6950 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
|
6951 |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
6952 /* 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
|
6953 if (! f1) |
|
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6954 { |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
6955 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
|
6956 |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6957 if (bar) |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6958 { |
|
3669
fd4187a96445
(XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents:
3639
diff
changeset
|
6959 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
|
6960 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
|
6961 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
|
6962 } |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6963 } |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6964 |
|
20180
bfbf6a2939a3
(XTmouse_position): Handle INSIST < 0.
Karl Heuer <kwzh@gnu.org>
parents:
19447
diff
changeset
|
6965 if (f1 == 0 && insist > 0) |
|
25682
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
6966 f1 = SELECTED_FRAME (); |
|
11122
ce63fb361ae9
(XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents:
11015
diff
changeset
|
6967 |
|
3669
fd4187a96445
(XTmouse_position): Don't set *f at all unless we win.
Richard M. Stallman <rms@gnu.org>
parents:
3639
diff
changeset
|
6968 if (f1) |
|
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
6969 { |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6970 /* 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
|
6971 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
|
6972 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
|
6973 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
|
6974 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
|
6975 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
|
6976 the frame are divided into. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6977 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6978 #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
|
6979 int ignore1, ignore2; |
|
a9f61727a90c
(construct_mouse_click): Don't convert to glyph units.
Richard M. Stallman <rms@gnu.org>
parents:
6023
diff
changeset
|
6980 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
|
6981 &last_mouse_glyph, |
|
11122
ce63fb361ae9
(XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents:
11015
diff
changeset
|
6982 FRAME_X_DISPLAY_INFO (f1)->grabbed |
|
ce63fb361ae9
(XTmouse_position): New arg `insist'.
Richard M. Stallman <rms@gnu.org>
parents:
11015
diff
changeset
|
6983 || insist); |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6984 #else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6985 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6986 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
|
6987 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
|
6988 int x = win_x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6989 int y = win_y; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6990 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6991 /* 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
|
6992 round down even for negative values. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6993 if (x < 0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6994 x -= width - 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6995 if (y < 0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6996 y -= height - 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6997 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6998 last_mouse_glyph.width = width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
6999 last_mouse_glyph.height = height; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7000 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
|
7001 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
|
7002 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7003 #endif |
|
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7004 |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7005 *bar_window = Qnil; |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7006 *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
|
7007 *fp = f1; |
|
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
7008 XSETINT (*x, win_x); |
|
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
7009 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
|
7010 *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
|
7011 } |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7012 } |
| 429 | 7013 } |
| 7014 | |
| 7015 UNBLOCK_INPUT; | |
| 7016 } | |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7017 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7018 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7019 DEFUN ("xt-process-timeouts", Fxt_process_timeouts, Sxt_process_timeouts, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7020 0, 0, 0, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7021 "Arrange for Xt timeout callbacks to be called.") |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7022 () |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7023 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7024 #ifdef USE_X_TOOLKIT |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7025 BLOCK_INPUT; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7026 while (XtAppPending (Xt_app_con) & XtIMTimer) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7027 XtAppProcessEvent (Xt_app_con, XtIMTimer); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7028 UNBLOCK_INPUT; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7029 #endif /* USE_X_TOOLKIT */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7030 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7031 return Qnil; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7032 } |
|
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 |
| 429 | 7035 |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7036 /* Scroll bar support. */ |
|
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7037 |
|
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7038 /* 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
|
7039 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
|
7040 bits. */ |
|
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7041 static struct scroll_bar * |
|
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7042 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
|
7043 Window window_id; |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7044 { |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7045 Lisp_Object tail; |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7046 |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7047 for (tail = Vframe_list; |
|
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7048 XGCTYPE (tail) == Lisp_Cons; |
|
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
7049 tail = XCDR (tail)) |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7050 { |
|
6521
a975c5944916
(x_window_to_scroll_bar, x_new_font): Use assignment, not initialization.
Karl Heuer <kwzh@gnu.org>
parents:
6413
diff
changeset
|
7051 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
|
7052 |
|
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
7053 frame = XCAR (tail); |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7054 /* 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
|
7055 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
|
7056 abort (); |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7057 |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7058 /* 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
|
7059 right window ID. */ |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7060 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
|
7061 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
|
7062 /* 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
|
7063 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
|
7064 ! GC_NILP (bar) || (bar = condemned, |
|
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7065 condemned = Qnil, |
|
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7066 ! 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
|
7067 bar = XSCROLL_BAR (bar)->next) |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7068 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
|
7069 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
|
7070 } |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7071 |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7072 return 0; |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7073 } |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7074 |
|
24991
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7077 /************************************************************************ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7078 Toolkit scroll bars |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7079 ************************************************************************/ |
|
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 #if USE_TOOLKIT_SCROLL_BARS |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7082 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7083 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
|
7084 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
|
7085 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
|
7086 struct scroll_bar *)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7087 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
|
7088 int, int, int)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7089 |
|
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 /* 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
|
7092 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7093 static XtActionHookId action_hook_id; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7094 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7095 /* 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
|
7096 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
|
7097 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7098 static Lisp_Object window_being_scrolled; |
|
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 /* 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
|
7101 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7102 static int last_scroll_bar_part; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7103 |
|
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 /* Action hook installed via XtAppAddActionHook when toolkit scroll |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7106 bars are used.. The hoos is responsible for detecting when |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7107 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
|
7108 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
|
7109 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7110 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7111 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
|
7112 num_params) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7113 Widget widget; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7114 XtPointer client_data; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7115 String action_name; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7116 XEvent *event; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7117 String *params; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7118 Cardinal *num_params; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7119 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7120 int scroll_bar_p; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7121 char *end_action; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7122 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7123 #ifdef USE_MOTIF |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7124 scroll_bar_p = XmIsScrollBar (widget); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7125 end_action = "Release"; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7126 #elif defined HAVE_XAW3D |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7127 scroll_bar_p = XtIsSubclass (widget, scrollbarWidgetClass); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7128 end_action = "EndScroll"; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7129 #else |
|
25692
121bd925411f
Don't continue #define args for benefit of old cc.
Dave Love <fx@gnu.org>
parents:
25682
diff
changeset
|
7130 #error unknown scroll bar toolkit |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7131 #endif /* HAVE_XAW3D */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7132 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7133 /* Although LessTif uses XtTimeouts like Xaw3d, the timer hack to |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7134 let Xt timeouts be processed doesn't work. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7135 if (scroll_bar_p |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7136 && strcmp (action_name, end_action) == 0 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7137 && WINDOWP (window_being_scrolled)) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7138 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7139 struct window *w; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7140 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7141 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
|
7142 scroll_bar_end_scroll, 0, 0); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7143 w = XWINDOW (window_being_scrolled); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7144 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
|
7145 window_being_scrolled = Qnil; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7146 last_scroll_bar_part = -1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7147 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7148 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7149 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7150 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7151 /* 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
|
7152 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
|
7153 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
|
7154 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
|
7155 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7156 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7157 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
|
7158 Lisp_Object window; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7159 int part, portion, whole; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7160 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7161 XEvent event; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7162 XClientMessageEvent *ev = (XClientMessageEvent *) &event; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7163 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
|
7164 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7165 /* 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
|
7166 ev->type = ClientMessage; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7167 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
|
7168 ev->display = FRAME_X_DISPLAY (f); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7169 ev->window = FRAME_X_WINDOW (f); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7170 ev->format = 32; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7171 ev->data.l[0] = (long) window; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7172 ev->data.l[1] = (long) part; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7173 ev->data.l[2] = (long) 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7174 ev->data.l[3] = (long) portion; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7175 ev->data.l[4] = (long) whole; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7176 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7177 /* 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
|
7178 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
|
7179 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
|
7180 BLOCK_INPUT; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7181 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
|
7182 UNBLOCK_INPUT; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7183 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7184 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7185 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7186 /* 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
|
7187 in *IEVENT. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7188 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7189 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7190 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
|
7191 XEvent *event; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7192 struct input_event *ievent; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7193 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7194 XClientMessageEvent *ev = (XClientMessageEvent *) event; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7195 Lisp_Object window = (Lisp_Object) ev->data.l[0]; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7196 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
|
7197 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7198 ievent->kind = scroll_bar_click; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7199 ievent->frame_or_window = window; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7200 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
|
7201 ievent->part = ev->data.l[1]; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7202 ievent->code = ev->data.l[2]; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7203 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
|
7204 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
|
7205 ievent->modifiers = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7206 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7207 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7208 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7209 #ifdef USE_MOTIF |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7210 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7211 /* 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
|
7212 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7213 #define XM_SB_MIN 1 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7214 #define XM_SB_MAX 10000000 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7215 #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
|
7216 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7217 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7218 /* 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
|
7219 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
|
7220 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
|
7221 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7222 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7223 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
|
7224 Widget widget; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7225 XtPointer client_data, call_data; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7226 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7227 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
|
7228 XmScrollBarCallbackStruct *cs = (XmScrollBarCallbackStruct *) call_data; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7229 double percent; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7230 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
|
7231 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7232 switch (cs->reason) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7233 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7234 case XmCR_DECREMENT: |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7235 bar->dragging = Qnil; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7236 part = scroll_bar_up_arrow; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7237 break; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7238 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7239 case XmCR_INCREMENT: |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7240 bar->dragging = Qnil; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7241 part = scroll_bar_down_arrow; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7242 break; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7243 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7244 case XmCR_PAGE_DECREMENT: |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7245 bar->dragging = Qnil; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7246 part = scroll_bar_above_handle; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7247 break; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7248 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7249 case XmCR_PAGE_INCREMENT: |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7250 bar->dragging = Qnil; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7251 part = scroll_bar_below_handle; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7252 break; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7253 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7254 case XmCR_TO_TOP: |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7255 bar->dragging = Qnil; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7256 part = scroll_bar_to_top; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7257 break; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7258 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7259 case XmCR_TO_BOTTOM: |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7260 bar->dragging = Qnil; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7261 part = scroll_bar_to_bottom; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7262 break; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7263 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7264 case XmCR_DRAG: |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7265 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7266 int slider_size; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7267 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
|
7268 && XINT (bar->dragging) <= cs->value); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7269 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7270 /* Get the slider size. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7271 BLOCK_INPUT; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7272 XtVaGetValues (widget, XmNsliderSize, &slider_size, NULL); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7273 UNBLOCK_INPUT; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7274 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7275 /* 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
|
7276 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
|
7277 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
|
7278 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
|
7279 we have to do something. |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7280 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7281 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
|
7282 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
|
7283 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
|
7284 a better slider behavior. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7285 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7286 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
|
7287 || (dragging_down_p |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7288 && 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
|
7289 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7290 part = scroll_bar_down_arrow; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7291 bar->dragging = Qnil; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7292 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7293 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7294 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7295 whole = XM_SB_RANGE; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7296 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
|
7297 part = scroll_bar_handle; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7298 bar->dragging = make_number (cs->value); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7299 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7300 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7301 break; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7302 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7303 case XmCR_VALUE_CHANGED: |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7304 break; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7305 }; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7306 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7307 if (part >= 0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7308 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7309 window_being_scrolled = bar->window; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7310 last_scroll_bar_part = part; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7311 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
|
7312 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7313 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7314 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7315 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7316 #else /* not USE_MOTIF, i.e. XAW3D. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7317 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7318 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7319 /* Xaw3d scroll bar callback. Invoked when the thumb is dragged. |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7320 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
|
7321 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
|
7322 the thumb is. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7323 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7324 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7325 xaw3d_jump_callback (widget, client_data, call_data) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7326 Widget widget; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7327 XtPointer client_data, call_data; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7328 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7329 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
|
7330 float top = *(float *) call_data; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7331 float shown; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7332 int whole, portion; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7333 int dragging_down_p, part; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7334 double epsilon = 0.01; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7335 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7336 /* 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
|
7337 BLOCK_INPUT; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7338 XtVaGetValues (widget, XtNshown, &shown, NULL); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7339 UNBLOCK_INPUT; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7340 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7341 whole = 10000000; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7342 portion = shown < 1 ? top * whole : 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7343 dragging_down_p = (INTEGERP (bar->dragging) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7344 && XINT (bar->dragging) < portion); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7345 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7346 if (shown < 1 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7347 && (abs (top + shown - 1) < epsilon |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7348 || (dragging_down_p |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7349 && 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
|
7350 part = scroll_bar_down_arrow; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7351 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7352 part = scroll_bar_handle; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7353 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7354 window_being_scrolled = bar->window; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7355 bar->dragging = make_number (portion); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7356 last_scroll_bar_part = part; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7357 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
|
7358 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7359 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7360 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7361 /* Xaw3d scroll bar callback. Invoked for incremental scrolling., |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7362 i.e. line or page up or down. WIDGET is the Xaw3d scroll bar |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7363 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
|
7364 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
|
7365 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
|
7366 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
|
7367 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
|
7368 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7369 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7370 xaw3d_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
|
7371 Widget widget; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7372 XtPointer client_data, call_data; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7373 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7374 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
|
7375 int position = (int) call_data; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7376 Dimension height; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7377 int part; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7378 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7379 /* 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
|
7380 BLOCK_INPUT; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7381 XtVaGetValues (widget, XtNheight, &height, NULL); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7382 UNBLOCK_INPUT; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7383 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7384 if (position < 0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7385 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7386 if (abs (position) < height) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7387 part = scroll_bar_up_arrow; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7388 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7389 part = scroll_bar_above_handle; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7390 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7391 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7392 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7393 if (abs (position) < height) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7394 part = scroll_bar_down_arrow; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7395 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7396 part = scroll_bar_below_handle; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7397 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7398 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7399 window_being_scrolled = bar->window; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7400 bar->dragging = Qnil; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7401 last_scroll_bar_part = part; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7402 x_send_scroll_bar_event (bar->window, part, 0, 0); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7403 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7404 |
|
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 /* not USE_MOTIF */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7407 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7408 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7409 /* 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
|
7410 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
|
7411 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7412 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7413 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
|
7414 struct frame *f; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7415 struct scroll_bar *bar; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7416 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7417 Window xwindow; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7418 Widget widget; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7419 Arg av[20]; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7420 int ac = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7421 char *scroll_bar_name = "verticalScrollBar"; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7422 unsigned long pixel; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7423 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7424 BLOCK_INPUT; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7425 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7426 #ifdef USE_MOTIF |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7427 /* LessTif 0.85, problems: |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7428 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7429 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
|
7430 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
|
7431 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7432 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
|
7433 cursor (see below)? */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7434 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7435 /* Set resources. Create the widget. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7436 XtSetArg (av[ac], XtNmappedWhenManaged, False); ++ac; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7437 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
|
7438 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
|
7439 XtSetArg (av[ac], XmNorientation, XmVERTICAL); ++ac; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7440 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
|
7441 XtSetArg (av[ac], XmNincrement, 1); ++ac; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7442 XtSetArg (av[ac], XmNpageIncrement, 1); ++ac; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7443 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7444 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
|
7445 if (pixel != -1) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7446 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7447 XtSetArg (av[ac], XmNforeground, pixel); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7448 ++ac; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7449 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7450 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7451 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
|
7452 if (pixel != -1) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7453 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7454 XtSetArg (av[ac], XmNbackground, pixel); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7455 ++ac; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7456 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7457 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7458 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
|
7459 scroll_bar_name, av, ac); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7460 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7461 /* 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
|
7462 XtAddCallback (widget, XmNdecrementCallback, xm_scroll_callback, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7463 (XtPointer) bar); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7464 XtAddCallback (widget, XmNdragCallback, xm_scroll_callback, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7465 (XtPointer) bar); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7466 XtAddCallback (widget, XmNincrementCallback, xm_scroll_callback, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7467 (XtPointer) bar); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7468 XtAddCallback (widget, XmNpageDecrementCallback, xm_scroll_callback, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7469 (XtPointer) bar); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7470 XtAddCallback (widget, XmNpageIncrementCallback, xm_scroll_callback, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7471 (XtPointer) bar); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7472 XtAddCallback (widget, XmNtoBottomCallback, xm_scroll_callback, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7473 (XtPointer) bar); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7474 XtAddCallback (widget, XmNtoTopCallback, xm_scroll_callback, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7475 (XtPointer) bar); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7476 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7477 /* 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
|
7478 XtRealizeWidget (widget); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7479 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7480 /* 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
|
7481 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
|
7482 XDefineCursor (XtDisplay (widget), XtWindow (widget), |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7483 f->output_data.x->nontext_cursor); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7484 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7485 #elif defined HAVE_XAW3D |
|
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 /* 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
|
7488 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
|
7489 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
|
7490 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
|
7491 XtSetArg (av[ac], XtNmappedWhenManaged, False); ++ac; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7492 XtSetArg (av[ac], XtNorientation, XtorientVertical); ++ac; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7493 XtSetArg (av[ac], XtNcursorName, "left_ptr"); ++ac; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7494 XtSetArg (av[ac], XtNbeNiceToColormap, True); ++ac; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7495 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7496 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
|
7497 if (pixel != -1) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7498 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7499 XtSetArg (av[ac], XtNforeground, pixel); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7500 ++ac; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7501 } |
|
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 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
|
7504 if (pixel != -1) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7505 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7506 XtSetArg (av[ac], XtNbackground, pixel); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7507 ++ac; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7508 } |
|
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 widget = XtCreateWidget (scroll_bar_name, scrollbarWidgetClass, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7511 f->output_data.x->edit_widget, av, ac); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7512 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7513 /* Define callbacks. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7514 XtAddCallback (widget, XtNjumpProc, xaw3d_jump_callback, (XtPointer) bar); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7515 XtAddCallback (widget, XtNscrollProc, xaw3d_scroll_callback, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7516 (XtPointer) bar); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7517 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7518 /* 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
|
7519 XtRealizeWidget (widget); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7520 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7521 #endif /* HAVE_XAW3D */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7522 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7523 /* 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
|
7524 finishes interacting with a scroll bar. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7525 if (action_hook_id == 0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7526 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
|
7527 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7528 /* 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
|
7529 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
|
7530 xwindow = XtWindow (widget); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7531 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
|
7532 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7533 UNBLOCK_INPUT; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7534 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7535 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7536 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7537 /* 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
|
7538 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
|
7539 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7540 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7541 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
|
7542 struct scroll_bar *bar; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7543 int portion, position, whole; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7544 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7545 float top, shown; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7546 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
|
7547 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7548 if (whole == 0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7549 top = 0, shown = 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7550 else |
|
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 top = (float) position / whole; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7553 shown = (float) portion / whole; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7554 } |
|
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 BLOCK_INPUT; |
|
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 #ifdef USE_MOTIF |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7559 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7560 int size, value; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7561 Boolean arrow1_selected, arrow2_selected; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7562 unsigned char flags; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7563 XmScrollBarWidget sb; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7564 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7565 /* Slider size. Must be in the range [1 .. MAX - MIN] where NAX |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7566 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
|
7567 value. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7568 size = shown * XM_SB_RANGE; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7569 size = min (size, XM_SB_RANGE); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7570 size = max (size, 1); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7571 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7572 /* 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
|
7573 value = top * XM_SB_RANGE; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7574 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
|
7575 value = max (value, XM_SB_MIN); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7576 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7577 /* 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
|
7578 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
|
7579 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
|
7580 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
|
7581 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
|
7582 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
|
7583 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7584 sb = (XmScrollBarWidget) widget; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7585 arrow1_selected = sb->scrollBar.arrow1_selected; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7586 arrow2_selected = sb->scrollBar.arrow2_selected; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7587 flags = sb->scrollBar.flags; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7588 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7589 if (NILP (bar->dragging)) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7590 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
|
7591 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
|
7592 /* This has the negative side effect that the slider value is |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7593 not would it would be if we scrolled here using line-wise or |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7594 page-wise movement. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7595 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
|
7596 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7597 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7598 /* 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
|
7599 This reduces flicker effects. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7600 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
|
7601 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7602 XmScrollBarGetValues (widget, &old_value, &old_size, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7603 &increment, &page_increment); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7604 XmScrollBarSetValues (widget, old_value, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7605 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
|
7606 0, 0, False); |
|
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 sb->scrollBar.arrow1_selected = arrow1_selected; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7610 sb->scrollBar.arrow2_selected = arrow2_selected; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7611 sb->scrollBar.flags = flags; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7612 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7613 #elif defined HAVE_XAW3D |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7614 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7615 /* Restrict to [0 1]. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7616 top = max (0, min (1, top)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7617 shown = max (0, min (1, shown)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7618 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7619 /* 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
|
7620 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
|
7621 for `NARROWPROTO'. See s/freebsd.h for an example. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7622 if (NILP (bar->dragging)) |
|
25101
6b42357f28f9
(x_set_toolkit_scroll_bar_thumb): Fix previous change.
Gerd Moellmann <gerd@gnu.org>
parents:
25091
diff
changeset
|
7623 { |
|
6b42357f28f9
(x_set_toolkit_scroll_bar_thumb): Fix previous change.
Gerd Moellmann <gerd@gnu.org>
parents:
25091
diff
changeset
|
7624 float old_top, old_shown; |
|
6b42357f28f9
(x_set_toolkit_scroll_bar_thumb): Fix previous change.
Gerd Moellmann <gerd@gnu.org>
parents:
25091
diff
changeset
|
7625 XtVaGetValues (widget, XtNtopOfThumb, &old_top, XtNshown, &old_shown, |
|
6b42357f28f9
(x_set_toolkit_scroll_bar_thumb): Fix previous change.
Gerd Moellmann <gerd@gnu.org>
parents:
25091
diff
changeset
|
7626 NULL); |
|
6b42357f28f9
(x_set_toolkit_scroll_bar_thumb): Fix previous change.
Gerd Moellmann <gerd@gnu.org>
parents:
25091
diff
changeset
|
7627 if (top != old_top || shown != old_shown) |
|
6b42357f28f9
(x_set_toolkit_scroll_bar_thumb): Fix previous change.
Gerd Moellmann <gerd@gnu.org>
parents:
25091
diff
changeset
|
7628 XawScrollbarSetThumb (widget, top, shown); |
|
6b42357f28f9
(x_set_toolkit_scroll_bar_thumb): Fix previous change.
Gerd Moellmann <gerd@gnu.org>
parents:
25091
diff
changeset
|
7629 } |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7630 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7631 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7632 ScrollbarWidget sb = (ScrollbarWidget) widget; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7633 int scroll_mode = sb->scrollbar.scroll_mode; |
|
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 sb->scrollbar.scroll_mode = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7636 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7637 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
|
7638 XawScrollbarSetThumb (widget, top, 1 - top); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7639 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7640 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7641 float old_top; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7642 XtVaGetValues (widget, XtNtopOfThumb, &old_top, NULL); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7643 XawScrollbarSetThumb (widget, old_top, min (shown, 1 - old_top)); |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7646 sb->scrollbar.scroll_mode = scroll_mode; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7647 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7648 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7649 #endif /* HAVE_XAW3D */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7650 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7651 UNBLOCK_INPUT; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7652 } |
|
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 #endif /* USE_TOOLKIT_SCROLL_BARS */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7655 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7656 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7657 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7658 /************************************************************************ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7659 Scroll bars, general |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7660 ************************************************************************/ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7661 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7662 /* 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
|
7663 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
|
7664 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
|
7665 scroll bar. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7666 |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7667 static struct scroll_bar * |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7668 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
|
7669 struct window *w; |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7670 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
|
7671 { |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7672 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
|
7673 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
|
7674 = 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
|
7675 |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7676 BLOCK_INPUT; |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7677 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7678 #if USE_TOOLKIT_SCROLL_BARS |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7679 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
|
7680 #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
|
7681 { |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7682 XSetWindowAttributes a; |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7683 unsigned long mask; |
|
25716
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
7684 Window window; |
|
24991
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 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
|
7687 if (a.background_pixel == -1) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7688 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
|
7689 |
|
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7690 a.event_mask = (ButtonPressMask | ButtonReleaseMask |
|
1793
cf4c3f01ddb9
* xterm.c (x_scrollbar_create): Include PointerMotionHintMask in
Jim Blandy <jimb@redhat.com>
parents:
1787
diff
changeset
|
7691 | ButtonMotionMask | PointerMotionHintMask |
|
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7692 | ExposureMask); |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
7693 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
|
7694 |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
7695 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
|
7696 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7697 /* 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
|
7698 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
|
7699 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
|
7700 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
|
7701 left, top, width, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7702 window_box_height (w), False); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7703 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7704 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
|
7705 /* Position and size of scroll bar. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7706 left + VERTICAL_SCROLL_BAR_WIDTH_TRIM, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7707 top, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7708 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
|
7709 height, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7710 /* Border width, depth, class, and visual. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7711 0, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7712 CopyFromParent, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7713 CopyFromParent, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7714 CopyFromParent, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7715 /* Attributes. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7716 mask, &a); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7717 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
|
7718 } |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7719 #endif /* not USE_TOOLKIT_SCROLL_BARS */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7720 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7721 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
|
7722 XSETINT (bar->top, top); |
|
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
7723 XSETINT (bar->left, left); |
|
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
7724 XSETINT (bar->width, width); |
|
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
7725 XSETINT (bar->height, height); |
|
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
7726 XSETINT (bar->start, 0); |
|
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
7727 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
|
7728 bar->dragging = Qnil; |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7729 |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7730 /* 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
|
7731 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
|
7732 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
|
7733 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
|
7734 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
|
7735 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
|
7736 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7737 /* Map the window/widget. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7738 #if USE_TOOLKIT_SCROLL_BARS |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7739 XtMapWidget (SCROLL_BAR_X_WIDGET (bar)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7740 XtConfigureWidget (SCROLL_BAR_X_WIDGET (bar), |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7741 left + VERTICAL_SCROLL_BAR_WIDTH_TRIM, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7742 top, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7743 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
|
7744 height, 0); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7745 #else /* not USE_TOOLKIT_SCROLL_BARS */ |
|
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
7746 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
|
7747 #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
|
7748 |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7749 UNBLOCK_INPUT; |
|
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7750 return bar; |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7751 } |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7752 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7753 |
|
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7754 /* 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
|
7755 |
|
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7756 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
|
7757 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
|
7758 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
|
7759 events.) |
|
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7760 |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7761 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
|
7762 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
|
7763 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
|
7764 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
|
7765 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
|
7766 |
|
25716
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
7767 #ifndef USE_TOOLKIT_SCROLL_BARS |
|
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
7768 |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7769 static void |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7770 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
|
7771 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
|
7772 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
|
7773 int rebuild; |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7774 { |
|
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7775 int dragging = ! NILP (bar->dragging); |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7776 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
|
7777 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
|
7778 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
|
7779 |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7780 /* 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
|
7781 if (! rebuild |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7782 && 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
|
7783 && 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
|
7784 return; |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7785 |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7786 BLOCK_INPUT; |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7787 |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7788 { |
|
16251
ec1b1ae37295
Pass frame arg in calls to VERTICAL_SCROLL_BAR_INSIDE_HEIGHT
Richard M. Stallman <rms@gnu.org>
parents:
16220
diff
changeset
|
7789 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
|
7790 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
|
7791 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
|
7792 |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7793 /* 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
|
7794 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
|
7795 { |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7796 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
|
7797 |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7798 if (start < 0) |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7799 start = 0; |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7800 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
|
7801 start = top_range; |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7802 end = start + length; |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7803 |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7804 if (end < start) |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7805 end = start; |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7806 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
|
7807 end = top_range; |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7808 } |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7809 |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7810 /* 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
|
7811 XSETINT (bar->start, start); |
|
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
7812 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
|
7813 |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7814 /* 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
|
7815 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
|
7816 end = top_range; |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7817 |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7818 /* 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
|
7819 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
|
7820 that many pixels tall. */ |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7821 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
|
7822 |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7823 /* 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
|
7824 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
|
7825 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
|
7826 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
|
7827 |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7828 /* 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
|
7829 VERTICAL_SCROLL_BAR_LEFT_BORDER, |
|
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7830 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
|
7831 inside_width, start, |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7832 False); |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7833 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7834 /* 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
|
7835 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
|
7836 XSetForeground (FRAME_X_DISPLAY (f), gc, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7837 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
|
7838 |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7839 /* 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
|
7840 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
|
7841 |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7842 /* x, y, width, height */ |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7843 VERTICAL_SCROLL_BAR_LEFT_BORDER, |
|
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7844 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
|
7845 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
|
7846 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7847 /* 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
|
7848 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
|
7849 XSetForeground (FRAME_X_DISPLAY (f), gc, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7850 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
|
7851 |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7852 /* 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
|
7853 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
|
7854 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
|
7855 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
|
7856 |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7857 /* 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
|
7858 VERTICAL_SCROLL_BAR_LEFT_BORDER, |
|
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7859 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
|
7860 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
|
7861 False); |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7862 |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7863 } |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7864 |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7865 UNBLOCK_INPUT; |
|
25716
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
7866 } |
|
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
7867 |
|
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
7868 #endif /* !USE_TOOLKIT_SCROLL_BARS */ |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7869 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7870 /* 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
|
7871 nil. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7872 |
|
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7873 static void |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7874 x_scroll_bar_remove (bar) |
|
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7875 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
|
7876 { |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7877 BLOCK_INPUT; |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7878 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7879 #if USE_TOOLKIT_SCROLL_BARS |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7880 XtDestroyWidget (SCROLL_BAR_X_WIDGET (bar)); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7881 #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
|
7882 { |
|
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
7883 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
|
7884 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
|
7885 } |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7886 #endif /* not USE_TOOLKIT_SCROLL_BARS */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7887 |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7888 /* 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
|
7889 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
|
7890 |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7891 UNBLOCK_INPUT; |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7892 } |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7893 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7894 |
|
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7895 /* 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
|
7896 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
|
7897 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
|
7898 create one. */ |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7899 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7900 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7901 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
|
7902 struct window *w; |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7903 int portion, whole, position; |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7904 { |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7905 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
|
7906 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
|
7907 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
|
7908 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
|
7909 |
|
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
7910 /* Get window dimensions. */ |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7911 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
|
7912 top = window_y; |
|
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
7913 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
|
7914 height = window_height; |
|
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
7915 |
|
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
7916 /* 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
|
7917 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
|
7918 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
|
7919 else |
|
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
7920 left = XFASTINT (w->left); |
|
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
7921 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
|
7922 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
|
7923 |
|
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
7924 /* 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
|
7925 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
|
7926 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
|
7927 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
|
7928 else |
|
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
7929 sb_width = width; |
|
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
7930 |
|
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
7931 /* 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
|
7932 #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
|
7933 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
|
7934 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
|
7935 else |
|
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
7936 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
|
7937 #else |
|
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
7938 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
|
7939 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
|
7940 else |
|
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
7941 sb_left = left; |
|
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
7942 #endif |
|
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
7943 |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
7944 /* 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
|
7945 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
|
7946 { |
|
25529
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
7947 BLOCK_INPUT; |
|
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
7948 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
|
7949 left, top, width, height, False); |
|
25529
7ae6423812ae
(XTset_vertical_scroll_bar): Block input when clearing
Gerd Moellmann <gerd@gnu.org>
parents:
25512
diff
changeset
|
7950 UNBLOCK_INPUT; |
|
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
7951 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
|
7952 } |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
7953 else |
|
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7954 { |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
7955 /* 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
|
7956 unsigned int mask = 0; |
|
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 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
|
7959 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7960 BLOCK_INPUT; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7961 |
|
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
7962 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
|
7963 mask |= CWX; |
|
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
7964 if (top != XINT (bar->top)) |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7965 mask |= CWY; |
|
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
7966 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
|
7967 mask |= CWWidth; |
|
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
7968 if (height != XINT (bar->height)) |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7969 mask |= CWHeight; |
|
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 #ifdef USE_TOOLKIT_SCROLL_BARS |
|
25269
621067279f19
(XTset_vertical_scroll_bar) [USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents:
25191
diff
changeset
|
7972 |
|
621067279f19
(XTset_vertical_scroll_bar) [USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents:
25191
diff
changeset
|
7973 /* 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
|
7974 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
|
7975 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
|
7976 left, top, width, height, False); |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7977 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7978 /* Move/size the scroll bar widget. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7979 if (mask) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7980 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
|
7981 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
|
7982 top, |
|
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
7983 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
|
7984 height, 0); |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7985 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7986 #else /* not USE_TOOLKIT_SCROLL_BARS */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
7987 |
|
25633
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
7988 if (VERTICAL_SCROLL_BAR_WIDTH_TRIM) |
|
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
7989 { |
|
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
7990 /* 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
|
7991 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
|
7992 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
|
7993 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
|
7994 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
|
7995 left, top, VERTICAL_SCROLL_BAR_WIDTH_TRIM, |
|
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
7996 height, False); |
|
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
7997 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
|
7998 left + width - VERTICAL_SCROLL_BAR_WIDTH_TRIM, |
|
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
7999 top, VERTICAL_SCROLL_BAR_WIDTH_TRIM, |
|
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8000 height, False); |
|
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8001 } |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8002 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8003 /* Move/size the scroll bar window. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8004 if (mask) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8005 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8006 XWindowChanges wc; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8007 |
|
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8008 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
|
8009 wc.y = top; |
|
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8010 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
|
8011 wc.height = height; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8012 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
|
8013 mask, &wc); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8014 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8015 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8016 #endif /* not USE_TOOLKIT_SCROLL_BARS */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8017 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8018 /* Remember new settings. */ |
|
25512
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8019 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
|
8020 XSETINT (bar->top, top); |
|
8d013f20532c
(x_scroll_bar_create): Don't clear under scroll bar
Gerd Moellmann <gerd@gnu.org>
parents:
25465
diff
changeset
|
8021 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
|
8022 XSETINT (bar->height, height); |
|
24991
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 UNBLOCK_INPUT; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8025 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8026 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8027 #if USE_TOOLKIT_SCROLL_BARS |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8028 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
|
8029 #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
|
8030 /* 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
|
8031 dragged. */ |
|
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8032 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
|
8033 { |
|
25541
be975dcf4a0c
(XTset_vertical_scroll_bar) [!USE_TOOLKIT_SCROLL_BARS]:
Gerd Moellmann <gerd@gnu.org>
parents:
25529
diff
changeset
|
8034 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
|
8035 |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8036 if (whole == 0) |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8037 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
|
8038 else |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8039 { |
|
3686
910ea1d66bfd
* xterm.c (XTset_vertical_scroll_bar): Use double type for
Jim Blandy <jimb@redhat.com>
parents:
3683
diff
changeset
|
8040 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
|
8041 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
|
8042 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
|
8043 } |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8044 } |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8045 #endif /* not USE_TOOLKIT_SCROLL_BARS */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8046 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8047 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
|
8048 } |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8049 |
|
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8050 |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8051 /* 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
|
8052 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
|
8053 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
|
8054 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
|
8055 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
|
8056 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
|
8057 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
|
8058 |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8059 /* 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
|
8060 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
|
8061 `*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
|
8062 |
|
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
8063 static void |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8064 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
|
8065 FRAME_PTR frame; |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8066 { |
|
13205
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
8067 /* 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
|
8068 while (! NILP (FRAME_SCROLL_BARS (frame))) |
|
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
8069 { |
|
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
8070 Lisp_Object bar; |
|
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
8071 bar = FRAME_SCROLL_BARS (frame); |
|
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
8072 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
|
8073 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
|
8074 XSCROLL_BAR (bar)->prev = Qnil; |
|
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
8075 if (! NILP (FRAME_CONDEMNED_SCROLL_BARS (frame))) |
|
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
8076 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
|
8077 FRAME_CONDEMNED_SCROLL_BARS (frame) = bar; |
|
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
8078 } |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8079 } |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8080 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8081 /* 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
|
8082 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
|
8083 static void |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8084 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
|
8085 struct window *window; |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8086 { |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8087 struct scroll_bar *bar; |
|
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8088 |
|
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8089 /* 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
|
8090 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
|
8091 abort (); |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8092 |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8093 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
|
8094 |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8095 /* 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
|
8096 { |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8097 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
|
8098 |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8099 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
|
8100 { |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8101 /* 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
|
8102 the lists. */ |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8103 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
|
8104 /* 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
|
8105 return; |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8106 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
|
8107 window->vertical_scroll_bar)) |
|
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8108 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
|
8109 else |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8110 /* 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
|
8111 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
|
8112 abort (); |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8113 } |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8114 else |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8115 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
|
8116 |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8117 if (! NILP (bar->next)) |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8118 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
|
8119 |
|
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8120 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
|
8121 bar->prev = Qnil; |
|
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
8122 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
|
8123 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
|
8124 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
|
8125 } |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8126 } |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8127 |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8128 /* 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
|
8129 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
|
8130 |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8131 static void |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8132 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
|
8133 FRAME_PTR f; |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8134 { |
|
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8135 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
|
8136 |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8137 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
|
8138 |
|
5752a95053f2
* xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents:
1793
diff
changeset
|
8139 /* 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
|
8140 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
|
8141 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
|
8142 |
|
5752a95053f2
* xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents:
1793
diff
changeset
|
8143 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
|
8144 { |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8145 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
|
8146 |
|
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8147 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
|
8148 |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8149 next = b->next; |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8150 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
|
8151 } |
|
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8152 |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8153 /* 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
|
8154 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
|
8155 } |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8156 |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8157 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8158 /* 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
|
8159 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
|
8160 |
|
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8161 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
|
8162 mark bits. */ |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8163 |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8164 static void |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8165 x_scroll_bar_expose (bar, event) |
|
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8166 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
|
8167 XEvent *event; |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8168 { |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8169 #ifndef USE_TOOLKIT_SCROLL_BARS |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8170 |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8171 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
|
8172 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
|
8173 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
|
8174 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
|
8175 |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8176 BLOCK_INPUT; |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8177 |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8178 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
|
8179 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8180 /* 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
|
8181 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
|
8182 |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8183 /* 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
|
8184 0, 0, |
|
16301
a02555b4b2b9
(x_scroll_bar_create, x_scroll_bar_move):
Richard M. Stallman <rms@gnu.org>
parents:
16251
diff
changeset
|
8185 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
|
8186 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
|
8187 |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8188 UNBLOCK_INPUT; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8189 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8190 #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
|
8191 } |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8192 |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8193 /* 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
|
8194 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
|
8195 |
|
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8196 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
|
8197 mark bits. */ |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8198 |
|
25716
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
8199 #ifndef USE_TOOLKIT_SCROLL_BARS |
|
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
8200 |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8201 static void |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8202 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
|
8203 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
|
8204 XEvent *event; |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8205 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
|
8206 { |
|
10287
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
8207 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
|
8208 abort (); |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8209 |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8210 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
|
8211 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
|
8212 emacs_event->modifiers |
|
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
8213 = (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
|
8214 (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
|
8215 event->xbutton.state) |
|
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
8216 | (event->type == ButtonRelease |
|
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
8217 ? up_modifier |
|
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
8218 : down_modifier)); |
|
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8219 emacs_event->frame_or_window = bar->window; |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8220 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
|
8221 { |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8222 #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
|
8223 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
|
8224 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
|
8225 = 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
|
8226 #endif |
|
10287
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
8227 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
|
8228 = 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
|
8229 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
|
8230 |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8231 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
|
8232 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
|
8233 |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8234 if (y < XINT (bar->start)) |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8235 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
|
8236 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
|
8237 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
|
8238 else |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8239 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
|
8240 |
|
5440f00480e6
* xterm.c (x_scroll_bar_handle_click): Never grab the scroll bar;
Jim Blandy <jimb@redhat.com>
parents:
2923
diff
changeset
|
8241 /* 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
|
8242 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
|
8243 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
|
8244 #if 0 |
|
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8245 /* 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
|
8246 holding it. */ |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8247 if (event->type == ButtonPress |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8248 && 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
|
8249 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
|
8250 #endif |
|
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8251 |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8252 /* 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
|
8253 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
|
8254 && ! NILP (bar->dragging)) |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8255 { |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8256 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
|
8257 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
|
8258 |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8259 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
|
8260 bar->dragging = Qnil; |
|
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 |
|
2958
3124e6244d1a
* xterm.c (x_scroll_bar_handle_click): Never grab the scroll bar;
Jim Blandy <jimb@redhat.com>
parents:
2953
diff
changeset
|
8263 /* 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
|
8264 #if 0 |
|
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
8265 /* 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
|
8266 the handle. */ |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8267 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
|
8268 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
|
8269 else |
|
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
8270 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
|
8271 #else |
|
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
8272 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
|
8273 #endif |
|
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8274 |
|
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
8275 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
|
8276 } |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8277 } |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8278 |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8279 /* 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
|
8280 |
|
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8281 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
|
8282 mark bits. */ |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8283 |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8284 static void |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8285 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
|
8286 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
|
8287 XEvent *event; |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8288 { |
|
12530
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
8289 FRAME_PTR f = XFRAME (XWINDOW (bar->window)->frame); |
|
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
8290 |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8291 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
|
8292 |
|
12530
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
8293 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
|
8294 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
|
8295 |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8296 /* 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
|
8297 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
|
8298 { |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8299 /* 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
|
8300 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
|
8301 |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8302 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
|
8303 { |
|
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8304 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
|
8305 |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8306 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
|
8307 } |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8308 } |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8309 } |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8310 |
|
25716
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
8311 #endif /* !USE_TOOLKIT_SCROLL_BARS */ |
|
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
8312 |
|
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8313 /* 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
|
8314 on the scroll bar. */ |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8315 |
|
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8316 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
|
8317 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
|
8318 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
|
8319 Lisp_Object *bar_window; |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8320 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
|
8321 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
|
8322 unsigned long *time; |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8323 { |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8324 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
|
8325 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
|
8326 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
|
8327 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
|
8328 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
|
8329 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
|
8330 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
|
8331 |
|
1803
5752a95053f2
* xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents:
1793
diff
changeset
|
8332 BLOCK_INPUT; |
|
5752a95053f2
* xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents:
1793
diff
changeset
|
8333 |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8334 /* 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
|
8335 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
|
8336 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
|
8337 |
|
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8338 /* 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
|
8339 &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
|
8340 &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
|
8341 |
|
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8342 /* 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
|
8343 &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
|
8344 |
|
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8345 /* 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
|
8346 &dummy_mask)) |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8347 ; |
|
2982
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8348 else |
|
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8349 { |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8350 #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
|
8351 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
|
8352 = 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
|
8353 #endif |
|
2982
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8354 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
|
8355 = 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
|
8356 |
|
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8357 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
|
8358 |
|
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8359 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
|
8360 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
|
8361 |
|
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8362 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
|
8363 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
|
8364 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
|
8365 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
|
8366 |
|
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
8367 *fp = f; |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8368 *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
|
8369 |
|
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8370 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
|
8371 *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
|
8372 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
|
8373 *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
|
8374 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
|
8375 *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
|
8376 else |
|
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8377 *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
|
8378 |
|
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
8379 XSETINT (*x, win_y); |
|
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
8380 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
|
8381 |
|
12530
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
8382 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
|
8383 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
|
8384 } |
|
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8385 |
|
44ed08628516
* xterm.c (x_scroll_bar_report_motion): Set *TIME whether or not
Jim Blandy <jimb@redhat.com>
parents:
2977
diff
changeset
|
8386 *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
|
8387 |
|
1803
5752a95053f2
* xterm.c (x_window_to_scrollbar): Search frames'
Jim Blandy <jimb@redhat.com>
parents:
1793
diff
changeset
|
8388 UNBLOCK_INPUT; |
|
1787
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8389 } |
|
5e245540d06f
Make scrollbar structures into lisp objects, so that they can be
Jim Blandy <jimb@redhat.com>
parents:
1739
diff
changeset
|
8390 |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8391 |
|
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
8392 /* 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
|
8393 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
|
8394 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
|
8395 redraw them. */ |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
8396 |
| 21514 | 8397 void |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
8398 x_scroll_bar_clear (f) |
|
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
8399 FRAME_PTR f; |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
8400 { |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8401 #ifndef USE_TOOLKIT_SCROLL_BARS |
|
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
8402 Lisp_Object bar; |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
8403 |
|
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
|
8404 /* 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
|
8405 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
|
8406 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
|
8407 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
|
8408 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
|
8409 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
|
8410 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
|
8411 0, 0, 0, 0, True); |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8412 #endif /* not USE_TOOLKIT_SCROLL_BARS */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8413 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8414 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8415 /* 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
|
8416 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
|
8417 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
|
8418 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8419 int |
|
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8420 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
|
8421 XEvent event; |
|
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8422 { |
|
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8423 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
|
8424 struct x_display_info *dpyinfo; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8425 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
|
8426 |
|
5872
6389c826f847
(x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents:
5825
diff
changeset
|
8427 BLOCK_INPUT; |
|
6389c826f847
(x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents:
5825
diff
changeset
|
8428 |
|
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
|
8429 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
|
8430 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
|
8431 if (f) |
|
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8432 { |
|
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8433 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
|
8434 { |
|
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8435 f->async_visible = 1; |
|
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8436 f->async_iconified = 0; |
|
18074
06e42aa4c208
(process_expose_from_menu, XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents:
18057
diff
changeset
|
8437 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
|
8438 SET_FRAME_GARBAGED (f); |
|
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8439 } |
|
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8440 else |
|
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8441 { |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8442 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
|
8443 event.xexpose.x, event.xexpose.y, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8444 event.xexpose.width, event.xexpose.height); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8445 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
|
8446 } |
|
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8447 } |
|
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8448 else |
|
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8449 { |
|
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8450 struct scroll_bar *bar |
|
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8451 = x_window_to_scroll_bar (event.xexpose.window); |
|
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
8452 |
|
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8453 if (bar) |
|
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8454 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
|
8455 } |
|
5872
6389c826f847
(x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents:
5825
diff
changeset
|
8456 |
|
6389c826f847
(x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents:
5825
diff
changeset
|
8457 UNBLOCK_INPUT; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8458 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
|
8459 } |
|
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8460 |
|
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8461 /* 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
|
8462 |
|
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8463 struct selection_event_queue |
|
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8464 { |
|
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8465 XEvent event; |
|
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8466 struct selection_event_queue *next; |
|
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8467 }; |
|
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8468 |
|
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8469 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
|
8470 |
|
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8471 /* 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
|
8472 |
|
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8473 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
|
8474 |
|
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8475 /* 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
|
8476 |
|
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8477 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
|
8478 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
|
8479 FRAME_PTR f; |
|
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8480 XEvent *event; |
|
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8481 { |
|
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8482 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
|
8483 = (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
|
8484 |
|
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
8485 if (queue_tmp != NULL) |
|
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8486 { |
|
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8487 queue_tmp->event = *event; |
|
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8488 queue_tmp->next = queue; |
|
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8489 queue = queue_tmp; |
|
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8490 } |
|
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8491 } |
|
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8492 |
|
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8493 /* 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
|
8494 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
|
8495 |
|
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8496 static void |
|
10634
de7beeb9f02c
(x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents:
10609
diff
changeset
|
8497 x_unqueue_events (display) |
|
de7beeb9f02c
(x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents:
10609
diff
changeset
|
8498 Display *display; |
|
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8499 { |
|
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
8500 while (queue != NULL) |
|
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8501 { |
|
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8502 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
|
8503 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
|
8504 queue = queue_tmp->next; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8505 xfree ((char *)queue_tmp); |
|
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8506 } |
|
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8507 } |
|
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8508 |
|
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8509 /* Start queuing SelectionRequest events. */ |
|
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8510 |
|
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8511 void |
|
10634
de7beeb9f02c
(x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents:
10609
diff
changeset
|
8512 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
|
8513 Display *display; |
|
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8514 { |
|
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8515 x_queue_selection_requests++; |
|
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8516 } |
|
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8517 |
|
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8518 /* Stop queuing SelectionRequest events. */ |
|
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8519 |
|
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8520 void |
|
10634
de7beeb9f02c
(x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents:
10609
diff
changeset
|
8521 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
|
8522 Display *display; |
|
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8523 { |
|
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8524 x_queue_selection_requests--; |
|
10634
de7beeb9f02c
(x_unqueue_events): Arg is now a Display *.
Richard M. Stallman <rms@gnu.org>
parents:
10609
diff
changeset
|
8525 x_unqueue_events (display); |
|
8353
525e990ca9d2
(x_queue_event, x_unqueue_events): New functions.
Richard M. Stallman <rms@gnu.org>
parents:
8291
diff
changeset
|
8526 } |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8527 |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
8528 /* The main X event-reading loop - XTread_socket. */ |
| 286 | 8529 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8530 /* Time stamp of enter window event. This is only used by XTread_socket, |
| 286 | 8531 but we have to put it out here, since static variables within functions |
| 8532 sometimes don't work. */ | |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8533 |
| 286 | 8534 static Time enter_timestamp; |
| 8535 | |
|
1436
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
8536 /* 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
|
8537 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
|
8538 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
|
8539 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
|
8540 |
|
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
8541 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
|
8542 given for enter_time stamp, above. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8543 |
|
1436
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
8544 static XComposeStatus compose_status; |
|
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
8545 |
| 2064 | 8546 /* Record the last 100 characters stored |
| 8547 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
|
8548 |
|
12657
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
8549 static int temp_index; |
|
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
8550 static short temp_buffer[100]; |
| 2064 | 8551 |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8552 /* 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
|
8553 on a particular display. */ |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8554 |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8555 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
|
8556 |
|
12657
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
8557 /* 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
|
8558 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
|
8559 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
|
8560 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
|
8561 |
|
12657
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
8562 static struct x_display_info *next_noop_dpyinfo; |
|
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
8563 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8564 #define SET_SAVED_MENU_EVENT(size) \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8565 do \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8566 { \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8567 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
|
8568 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
|
8569 = (XEvent *) xmalloc (sizeof (XEvent)); \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8570 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
|
8571 if (numchars >= 1) \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8572 { \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8573 bufp->kind = menu_bar_activate_event; \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8574 XSETFRAME (bufp->frame_or_window, f); \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8575 bufp++; \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8576 count++; \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8577 numchars--; \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8578 } \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8579 } \ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8580 while (0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8581 |
|
15711
099dc465c948
(SET_SAVED_MENU_EVENT): New macro.
Karl Heuer <kwzh@gnu.org>
parents:
15639
diff
changeset
|
8582 #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
|
8583 #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
|
8584 |
| 286 | 8585 /* Read events coming from the X server. |
| 8586 This routine is called by the SIGIO handler. | |
| 8587 We return as soon as there are no more events to be read. | |
| 8588 | |
| 8589 Events representing keys are stored in buffer BUFP, | |
| 8590 which can hold up to NUMCHARS characters. | |
| 8591 We return the number of characters stored into the buffer, | |
| 8592 thus pretending to be `read'. | |
| 8593 | |
| 8594 EXPECTED is nonzero if the caller knows input is available. */ | |
| 8595 | |
|
1530
a7f8a1fe258e
* xterm.c (x_convert_modifiers): Declare this to return an
Jim Blandy <jimb@redhat.com>
parents:
1436
diff
changeset
|
8596 int |
|
16330
e4d9d77012bc
(XTread_socket): Delete WAITP arg.
Richard M. Stallman <rms@gnu.org>
parents:
16301
diff
changeset
|
8597 XTread_socket (sd, bufp, numchars, expected) |
| 286 | 8598 register int sd; |
|
15711
099dc465c948
(SET_SAVED_MENU_EVENT): New macro.
Karl Heuer <kwzh@gnu.org>
parents:
15639
diff
changeset
|
8599 /* register */ struct input_event *bufp; |
|
099dc465c948
(SET_SAVED_MENU_EVENT): New macro.
Karl Heuer <kwzh@gnu.org>
parents:
15639
diff
changeset
|
8600 /* register */ int numchars; |
| 286 | 8601 int expected; |
| 8602 { | |
| 8603 int count = 0; | |
| 8604 int nbytes = 0; | |
| 8605 XEvent event; | |
| 771 | 8606 struct frame *f; |
|
3938
83d870a52936
* xterm.c (XTread_socket): Initialize event_found to zero, and
Jim Blandy <jimb@redhat.com>
parents:
3924
diff
changeset
|
8607 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
|
8608 struct x_display_info *dpyinfo; |
|
13232
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
8609 #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
|
8610 Status status_return; |
|
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
8611 #endif |
| 286 | 8612 |
|
2439
b6c62e4abf59
Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents:
2353
diff
changeset
|
8613 if (interrupt_input_blocked) |
| 286 | 8614 { |
|
2439
b6c62e4abf59
Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents:
2353
diff
changeset
|
8615 interrupt_input_pending = 1; |
| 286 | 8616 return -1; |
| 8617 } | |
| 8618 | |
|
2439
b6c62e4abf59
Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents:
2353
diff
changeset
|
8619 interrupt_input_pending = 0; |
| 286 | 8620 BLOCK_INPUT; |
|
9337
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
8621 |
|
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
8622 /* 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
|
8623 input_signal_count++; |
|
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
8624 |
| 286 | 8625 if (numchars <= 0) |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8626 abort (); /* Don't think this happens. */ |
| 286 | 8627 |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8628 /* 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
|
8629 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
|
8630 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
|
8631 { |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8632 #if 0 /* This ought to be unnecessary; let's verify it. */ |
| 286 | 8633 #ifdef FIOSNBIO |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8634 /* 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
|
8635 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
|
8636 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
|
8637 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
|
8638 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
|
8639 #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
|
8640 #endif |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8641 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8642 #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
|
8643 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
|
8644 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
|
8645 for X connections. */ |
| 286 | 8646 #ifndef SIGIO |
| 8647 #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
|
8648 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
|
8649 { |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8650 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
|
8651 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
|
8652 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
|
8653 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
|
8654 } |
|
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
8655 #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
|
8656 #endif /* SIGIO */ |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8657 #endif |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8658 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8659 /* 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
|
8660 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
|
8661 { |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8662 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
|
8663 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
|
8664 } |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8665 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8666 while (XPending (dpyinfo->display)) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8667 { |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8668 XNextEvent (dpyinfo->display, &event); |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8669 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8670 if (display_busy_cursor_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8671 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8672 /* Setting inhibit_busy_cursor to 2 inhibits busy-cursor |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8673 display until the next X event is read and we come |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8674 here again. Setting it to 1 inhibits busy-cursor |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8675 display for direct commands. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8676 if (event.type == MotionNotify |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8677 || event.type == EnterNotify |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8678 || (dpyinfo->grabbed |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8679 && event.type != ButtonRelease)) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8680 inhibit_busy_cursor = 2; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8681 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8682 inhibit_busy_cursor = 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8683 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8684 |
|
15973
6ad9e8fee494
(XTread_socket): Call XFilterEvent on all events,
Richard M. Stallman <rms@gnu.org>
parents:
15928
diff
changeset
|
8685 #ifdef HAVE_X_I18N |
|
15990
1185f8fc0bfb
(do_line_dance, dumprectangle): Use x_update_cursor.
Richard M. Stallman <rms@gnu.org>
parents:
15973
diff
changeset
|
8686 { |
|
1185f8fc0bfb
(do_line_dance, dumprectangle): Use x_update_cursor.
Richard M. Stallman <rms@gnu.org>
parents:
15973
diff
changeset
|
8687 struct frame *f1 = x_any_window_to_frame (dpyinfo, |
|
22230
32f2adf05397
(XTread_socket): Fix second argument of x_any_window_to_frame.
Richard M. Stallman <rms@gnu.org>
parents:
21933
diff
changeset
|
8688 event.xclient.window); |
|
15990
1185f8fc0bfb
(do_line_dance, dumprectangle): Use x_update_cursor.
Richard M. Stallman <rms@gnu.org>
parents:
15973
diff
changeset
|
8689 /* The necessity of the following line took me |
|
1185f8fc0bfb
(do_line_dance, dumprectangle): Use x_update_cursor.
Richard M. Stallman <rms@gnu.org>
parents:
15973
diff
changeset
|
8690 a full work-day to decipher from the docs!! */ |
|
1185f8fc0bfb
(do_line_dance, dumprectangle): Use x_update_cursor.
Richard M. Stallman <rms@gnu.org>
parents:
15973
diff
changeset
|
8691 if (f1 != 0 && FRAME_XIC (f1) && XFilterEvent (&event, None)) |
|
1185f8fc0bfb
(do_line_dance, dumprectangle): Use x_update_cursor.
Richard M. Stallman <rms@gnu.org>
parents:
15973
diff
changeset
|
8692 break; |
|
1185f8fc0bfb
(do_line_dance, dumprectangle): Use x_update_cursor.
Richard M. Stallman <rms@gnu.org>
parents:
15973
diff
changeset
|
8693 } |
|
15973
6ad9e8fee494
(XTread_socket): Call XFilterEvent on all events,
Richard M. Stallman <rms@gnu.org>
parents:
15928
diff
changeset
|
8694 #endif |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8695 event_found = 1; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8696 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8697 switch (event.type) |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8698 { |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8699 case ClientMessage: |
| 642 | 8700 { |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8701 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
|
8702 == 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
|
8703 && event.xclient.format == 32) |
| 642 | 8704 { |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8705 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
|
8706 == 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
|
8707 { |
|
18885
f7b6579204b8
(XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents:
18775
diff
changeset
|
8708 /* Use x_any_window_to_frame because this |
|
f7b6579204b8
(XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents:
18775
diff
changeset
|
8709 could be the shell widget window |
|
f7b6579204b8
(XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents:
18775
diff
changeset
|
8710 if the frame has no title bar. */ |
|
f7b6579204b8
(XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents:
18775
diff
changeset
|
8711 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
|
8712 #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
|
8713 /* Not quite sure this is needed -pd */ |
|
18885
f7b6579204b8
(XTread_socket) <ClientMessage>:
Richard M. Stallman <rms@gnu.org>
parents:
18775
diff
changeset
|
8714 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
|
8715 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
|
8716 #endif |
|
25921
eb5839cbfb16
(XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents:
25795
diff
changeset
|
8717 #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
|
8718 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
|
8719 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
|
8720 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
|
8721 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
|
8722 needed. |
|
eb5839cbfb16
(XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents:
25795
diff
changeset
|
8723 |
|
eb5839cbfb16
(XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents:
25795
diff
changeset
|
8724 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
|
8725 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
|
8726 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
|
8727 below can generate additional FocusIn events which confuse |
|
eb5839cbfb16
(XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents:
25795
diff
changeset
|
8728 Emacs. */ |
|
eb5839cbfb16
(XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents:
25795
diff
changeset
|
8729 |
|
18996
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
8730 /* 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
|
8731 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
|
8732 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
|
8733 if (f) |
|
18996
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
8734 { |
|
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
8735 Display *d = event.xclient.display; |
|
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
8736 /* 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
|
8737 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
|
8738 int count = x_catch_errors (d); |
|
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
8739 XSetInputFocus (d, event.xclient.window, |
|
25633
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8740 /* The ICCCM says this is |
|
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8741 the only valid choice. */ |
|
ddf2e1fef00b
(XTread_socket): In XSetInputFocus, use RevertToParent,
Richard M. Stallman <rms@gnu.org>
parents:
25546
diff
changeset
|
8742 RevertToParent, |
|
18996
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
8743 event.xclient.data.l[1]); |
|
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
8744 /* 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
|
8745 if there is an error. */ |
|
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
8746 XSync (d, False); |
|
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
8747 x_uncatch_errors (d, count); |
|
ef81a8b79506
(dumpglyphs): Check the dimension of FONT while
Richard M. Stallman <rms@gnu.org>
parents:
18885
diff
changeset
|
8748 } |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8749 /* Not certain about handling scroll bars here */ |
|
25921
eb5839cbfb16
(XTread_socket) <ClientMessage, WM_TAKE_FOCUS>:
Gerd Moellmann <gerd@gnu.org>
parents:
25795
diff
changeset
|
8750 #endif /* 0 */ |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8751 } |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8752 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
|
8753 == dpyinfo->Xatom_wm_save_yourself) |
| 642 | 8754 { |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8755 /* 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
|
8756 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
|
8757 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
|
8758 PropertyNotify. Can restart processing when |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8759 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
|
8760 if (numchars > 0) |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8761 { |
|
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
|
8762 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
|
8763 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
|
8764 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8765 /* 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
|
8766 for a single Emacs process. */ |
|
25682
f8543a6d88ca
(XTcursor_to): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents:
25646
diff
changeset
|
8767 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
|
8768 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
|
8769 event.xclient.window, |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8770 initial_argv, initial_argc); |
|
15519
045a36502ad4
(XTread_socket, Xatom_wm_save_yourself clause):
Richard M. Stallman <rms@gnu.org>
parents:
15515
diff
changeset
|
8771 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
|
8772 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
|
8773 event.xclient.window, |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8774 0, 0); |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8775 } |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8776 } |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8777 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
|
8778 == 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
|
8779 { |
|
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
|
8780 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
|
8781 = 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
|
8782 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
|
8783 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8784 if (f) |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8785 { |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8786 if (numchars == 0) |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8787 abort (); |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8788 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8789 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
|
8790 XSETFRAME (bufp->frame_or_window, f); |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8791 bufp++; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8792 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8793 count += 1; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8794 numchars -= 1; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8795 } |
| 642 | 8796 } |
| 8797 } | |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8798 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
|
8799 == dpyinfo->Xatom_wm_configure_denied) |
| 642 | 8800 { |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8801 } |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8802 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
|
8803 == 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
|
8804 { |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8805 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
|
8806 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
|
8807 = 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
|
8808 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8809 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
|
8810 new_y = event.xclient.data.s[1]; |
| 771 | 8811 |
| 8812 if (f) | |
|
5156
fd78458b8c43
(XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents:
5018
diff
changeset
|
8813 { |
|
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
8814 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
|
8815 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
|
8816 } |
| 642 | 8817 } |
|
13507
9a9f459075af
(HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents:
13363
diff
changeset
|
8818 #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
|
8819 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
|
8820 == dpyinfo->Xatom_editres) |
|
5156
fd78458b8c43
(XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents:
5018
diff
changeset
|
8821 { |
|
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
|
8822 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
|
8823 = 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
|
8824 _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
|
8825 &event, NULL); |
|
5156
fd78458b8c43
(XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents:
5018
diff
changeset
|
8826 } |
|
13507
9a9f459075af
(HACK_EDITRES): Define here as in xfns.c.
Richard M. Stallman <rms@gnu.org>
parents:
13363
diff
changeset
|
8827 #endif /* HACK_EDITRES */ |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8828 else if ((event.xclient.message_type |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8829 == dpyinfo->Xatom_DONE) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8830 || (event.xclient.message_type |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8831 == dpyinfo->Xatom_PAGE)) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8832 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8833 /* 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
|
8834 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
|
8835 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
|
8836 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
|
8837 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
|
8838 struct frame *f |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8839 = 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
|
8840 x_kill_gs_process (pixmap, f); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8841 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
|
8842 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8843 #ifdef USE_TOOLKIT_SCROLL_BARS |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8844 /* 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
|
8845 we construct an input_event. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8846 else if (event.xclient.message_type |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8847 == dpyinfo->Xatom_Scrollbar) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8848 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8849 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
|
8850 ++bufp, ++count, --numchars; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8851 goto out; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8852 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8853 #endif /* USE_TOOLKIT_SCROLL_BARS */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8854 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8855 goto OTHER; |
| 642 | 8856 } |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8857 break; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8858 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8859 case SelectionNotify: |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8860 #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
|
8861 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
|
8862 goto OTHER; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8863 #endif /* not USE_X_TOOLKIT */ |
| 21514 | 8864 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
|
8865 break; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8866 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8867 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
|
8868 #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
|
8869 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
|
8870 goto OTHER; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8871 #endif /* USE_X_TOOLKIT */ |
|
6941
a914781ef58a
(Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents:
6934
diff
changeset
|
8872 { |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8873 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
|
8874 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8875 if (numchars == 0) |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8876 abort (); |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8877 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8878 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
|
8879 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
|
8880 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
|
8881 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
|
8882 bufp->frame_or_window = Qnil; |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8883 bufp++; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8884 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8885 count += 1; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8886 numchars -= 1; |
|
6941
a914781ef58a
(Xatom_editres_name): Variable defined.
Richard M. Stallman <rms@gnu.org>
parents:
6934
diff
changeset
|
8887 } |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8888 break; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8889 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8890 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
|
8891 #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
|
8892 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
|
8893 goto OTHER; |
|
6984
8e9465c13702
(XTread_socket): Delete the non-NEW_SELECTIONS code
Richard M. Stallman <rms@gnu.org>
parents:
6983
diff
changeset
|
8894 #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
|
8895 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
|
8896 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
|
8897 &event); |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8898 else |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8899 { |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8900 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
|
8901 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8902 if (numchars == 0) |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8903 abort (); |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8904 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8905 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
|
8906 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
|
8907 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
|
8908 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
|
8909 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
|
8910 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
|
8911 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
|
8912 bufp->frame_or_window = Qnil; |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8913 bufp++; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8914 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8915 count += 1; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8916 numchars -= 1; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8917 } |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8918 break; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8919 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8920 case PropertyNotify: |
|
6984
8e9465c13702
(XTread_socket): Delete the non-NEW_SELECTIONS code
Richard M. Stallman <rms@gnu.org>
parents:
6983
diff
changeset
|
8921 #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
|
8922 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
|
8923 goto OTHER; |
|
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8924 #endif /* not USE_X_TOOLKIT */ |
| 21514 | 8925 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
|
8926 break; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8927 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8928 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
|
8929 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
|
8930 if (f) |
| 286 | 8931 { |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8932 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
|
8933 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
|
8934 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
|
8935 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
|
8936 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
|
8937 } |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8938 break; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8939 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8940 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
|
8941 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
|
8942 if (f) |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8943 { |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8944 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
|
8945 { |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8946 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
|
8947 f->async_iconified = 0; |
|
18074
06e42aa4c208
(process_expose_from_menu, XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents:
18057
diff
changeset
|
8948 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
|
8949 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
|
8950 } |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8951 else |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8952 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
|
8953 event.xexpose.window), |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8954 event.xexpose.x, event.xexpose.y, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8955 event.xexpose.width, event.xexpose.height); |
| 286 | 8956 } |
| 8957 else | |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8958 { |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8959 #ifdef USE_TOOLKIT_SCROLL_BARS |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8960 /* Dispatch event to the widget. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8961 goto OTHER; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8962 #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
|
8963 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
|
8964 = 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
|
8965 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8966 if (bar) |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8967 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
|
8968 #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
|
8969 else |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8970 goto OTHER; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8971 #endif /* USE_X_TOOLKIT */ |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8972 #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
|
8973 } |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8974 break; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8975 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8976 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
|
8977 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
|
8978 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
|
8979 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
|
8980 if (f) |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8981 { |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8982 expose_frame (f, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8983 event.xgraphicsexpose.x, event.xgraphicsexpose.y, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8984 event.xgraphicsexpose.width, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8985 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
|
8986 } |
|
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8987 #ifdef USE_X_TOOLKIT |
|
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8988 else |
|
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8989 goto OTHER; |
|
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
8990 #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
|
8991 break; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8992 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8993 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
|
8994 source area was completely |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8995 available */ |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8996 break; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8997 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
8998 case UnmapNotify: |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
8999 /* 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
|
9000 if (event.xmap.window == tip_window) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9001 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9002 tip_window = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9003 redo_mouse_highlight (); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9004 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9005 |
|
12750
7e5276da6270
(XTread_socket): For UnmapNotify, use x_top_window_to_frame.
Richard M. Stallman <rms@gnu.org>
parents:
12667
diff
changeset
|
9006 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
|
9007 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
|
9008 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
|
9009 { |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9010 /* 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
|
9011 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
|
9012 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
|
9013 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
|
9014 /* 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
|
9015 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
|
9016 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
|
9017 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
|
9018 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
|
9019 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
|
9020 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
|
9021 { |
|
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
9022 f->async_iconified = 1; |
|
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
9023 |
|
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
9024 bufp->kind = iconify_event; |
|
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
9025 XSETFRAME (bufp->frame_or_window, f); |
|
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
9026 bufp++; |
|
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
9027 count++; |
|
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
9028 numchars--; |
|
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
9029 } |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9030 } |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9031 goto OTHER; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9032 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9033 case MapNotify: |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9034 if (event.xmap.window == tip_window) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9035 /* 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
|
9036 the SET_FRAME_GARBAGED below. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9037 goto OTHER; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9038 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9039 /* 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
|
9040 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
|
9041 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
|
9042 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
|
9043 if (f) |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9044 { |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9045 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
|
9046 f->async_iconified = 0; |
|
18074
06e42aa4c208
(process_expose_from_menu, XTread_socket):
Richard M. Stallman <rms@gnu.org>
parents:
18057
diff
changeset
|
9047 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
|
9048 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9049 /* 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
|
9050 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
|
9051 SET_FRAME_GARBAGED (f); |
|
9823
e6dbda62fd61
(XTread_socket): Generate iconify and deiconify events.
Karl Heuer <kwzh@gnu.org>
parents:
9763
diff
changeset
|
9052 |
|
11348
e366abc2c753
(XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents:
11259
diff
changeset
|
9053 if (f->iconified) |
|
e366abc2c753
(XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents:
11259
diff
changeset
|
9054 { |
|
e366abc2c753
(XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents:
11259
diff
changeset
|
9055 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
|
9056 XSETFRAME (bufp->frame_or_window, f); |
|
e366abc2c753
(XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents:
11259
diff
changeset
|
9057 bufp++; |
|
e366abc2c753
(XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents:
11259
diff
changeset
|
9058 count++; |
|
e366abc2c753
(XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents:
11259
diff
changeset
|
9059 numchars--; |
|
e366abc2c753
(XTread_socket): Make deiconify event only if frame was iconified.
Richard M. Stallman <rms@gnu.org>
parents:
11259
diff
changeset
|
9060 } |
|
17519
5aa7011aa3d5
(x_set_offset): Turn off the code that added the border_width
Richard M. Stallman <rms@gnu.org>
parents:
17371
diff
changeset
|
9061 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
|
9062 && ! NILP (XCDR (Vframe_list))) |
|
11921
6ecaa3fac4e4
(XTread_socket): For MapNotify, call record_asynch_buffer_change.
Karl Heuer <kwzh@gnu.org>
parents:
11915
diff
changeset
|
9063 /* 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
|
9064 to update the frame titles |
|
6ecaa3fac4e4
(XTread_socket): For MapNotify, call record_asynch_buffer_change.
Karl Heuer <kwzh@gnu.org>
parents:
11915
diff
changeset
|
9065 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
|
9066 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
|
9067 } |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9068 goto OTHER; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9069 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9070 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
|
9071 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
|
9072 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9073 #ifdef USE_MOTIF |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9074 /* 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
|
9075 from consuming key events. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9076 if (f == 0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9077 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9078 Widget widget = XtWindowToWidget (dpyinfo->display, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9079 event.xkey.window); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9080 if (widget && XmIsScrollBar (widget)) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9081 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9082 widget = XtParent (widget); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9083 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
|
9084 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9085 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9086 #endif /* USE_MOTIF */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9087 |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9088 if (f != 0) |
| 286 | 9089 { |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9090 KeySym keysym, orig_keysym; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9091 /* al%imercury@uunet.uu.net says that making this 81 instead of |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9092 80 fixed a bug whereby meta chars made his Emacs hang. */ |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9093 unsigned char copy_buffer[81]; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9094 int modifiers; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9095 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9096 event.xkey.state |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9097 |= 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
|
9098 extra_keyboard_modifiers); |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9099 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
|
9100 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9101 /* 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
|
9102 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9103 /* 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
|
9104 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
|
9105 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
|
9106 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
|
9107 | 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
|
9108 | 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
|
9109 | 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
|
9110 |
|
16483
1b53fdb98184
(XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents:
16430
diff
changeset
|
9111 /* In case Meta is ComposeCharacter, |
|
1b53fdb98184
(XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents:
16430
diff
changeset
|
9112 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
|
9113 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
|
9114 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
|
9115 not it is combined with Meta. */ |
|
1b53fdb98184
(XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents:
16430
diff
changeset
|
9116 if (modifiers & dpyinfo->meta_mod_mask) |
|
1b53fdb98184
(XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents:
16430
diff
changeset
|
9117 bzero (&compose_status, sizeof (compose_status)); |
|
1b53fdb98184
(XTread_socket, KeyPress case): Clear compose_status
Richard M. Stallman <rms@gnu.org>
parents:
16430
diff
changeset
|
9118 |
|
13232
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9119 #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
|
9120 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
|
9121 { |
|
18705
c4f2eab8e736
(x_term_init): Don't use initializer for null_bits.
Richard M. Stallman <rms@gnu.org>
parents:
18646
diff
changeset
|
9122 /* The necessity of the following line took me |
|
c4f2eab8e736
(x_term_init): Don't use initializer for null_bits.
Richard M. Stallman <rms@gnu.org>
parents:
18646
diff
changeset
|
9123 a full work-day to decipher from the docs!! */ |
|
c4f2eab8e736
(x_term_init): Don't use initializer for null_bits.
Richard M. Stallman <rms@gnu.org>
parents:
18646
diff
changeset
|
9124 if (XFilterEvent (&event, None)) |
|
c4f2eab8e736
(x_term_init): Don't use initializer for null_bits.
Richard M. Stallman <rms@gnu.org>
parents:
18646
diff
changeset
|
9125 break; |
|
13232
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9126 nbytes = XmbLookupString (FRAME_XIC (f), |
|
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9127 &event.xkey, copy_buffer, |
|
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9128 80, &keysym, |
|
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9129 &status_return); |
|
23567
5a0cdfd791a2
(XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents:
23515
diff
changeset
|
9130 if (status_return == XLookupNone) |
|
5a0cdfd791a2
(XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents:
23515
diff
changeset
|
9131 break; |
|
5a0cdfd791a2
(XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents:
23515
diff
changeset
|
9132 else if (status_return == XLookupChars) |
|
5a0cdfd791a2
(XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents:
23515
diff
changeset
|
9133 keysym = NoSymbol; |
|
5a0cdfd791a2
(XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents:
23515
diff
changeset
|
9134 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
|
9135 && status_return != XLookupBoth) |
|
5a0cdfd791a2
(XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents:
23515
diff
changeset
|
9136 abort (); |
|
13232
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9137 } |
|
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9138 else |
|
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9139 nbytes = XLookupString (&event.xkey, copy_buffer, |
|
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9140 80, &keysym, &compose_status); |
|
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9141 #else |
|
10287
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
9142 nbytes = XLookupString (&event.xkey, copy_buffer, |
|
2e96f9f98276
(x_scroll_bar_handle_click): Use GC_WINDOWP.
Richard M. Stallman <rms@gnu.org>
parents:
10274
diff
changeset
|
9143 80, &keysym, &compose_status); |
|
13232
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9144 #endif |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9145 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9146 orig_keysym = keysym; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9147 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9148 if (numchars > 1) |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9149 { |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9150 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
|
9151 || keysym == XK_Delete |
|
17227
d11d6c9a48e8
(XTread_socket): Handle ISO_Left_Tab.
Richard M. Stallman <rms@gnu.org>
parents:
17194
diff
changeset
|
9152 #ifdef XK_ISO_Left_Tab |
|
17232
4604d19bd730
(XTread_socket): Accept XK_ISO_* keys.
Richard M. Stallman <rms@gnu.org>
parents:
17227
diff
changeset
|
9153 || (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
|
9154 #endif |
|
22400
8fbe6f509385
(XTread_socket): Accept Japanese XK keysyms.
Richard M. Stallman <rms@gnu.org>
parents:
22230
diff
changeset
|
9155 || (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
|
9156 || 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
|
9157 || IsMiscFunctionKey (keysym) /* 0xff60 <= x < VARIES */ |
|
3218
0069a30d083f
(XTread_socket, case KeyPress) [HPUX]:
Richard M. Stallman <rms@gnu.org>
parents:
3135
diff
changeset
|
9158 #ifdef HPUX |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9159 /* 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
|
9160 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
|
9161 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
|
9162 incorrectly. */ |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9163 || ((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
|
9164 && (unsigned)(keysym) < XK_KP_Space) |
|
3218
0069a30d083f
(XTread_socket, case KeyPress) [HPUX]:
Richard M. Stallman <rms@gnu.org>
parents:
3135
diff
changeset
|
9165 #endif |
|
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9166 #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
|
9167 || orig_keysym == XK_dead_circumflex |
|
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9168 #endif |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9169 #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
|
9170 || orig_keysym == XK_dead_grave |
|
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9171 #endif |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9172 #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
|
9173 || orig_keysym == XK_dead_tilde |
|
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9174 #endif |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9175 #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
|
9176 || orig_keysym == XK_dead_diaeresis |
|
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9177 #endif |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9178 #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
|
9179 || orig_keysym == XK_dead_macron |
|
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9180 #endif |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9181 #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
|
9182 || orig_keysym == XK_dead_degree |
|
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9183 #endif |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9184 #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
|
9185 || orig_keysym == XK_dead_acute |
|
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9186 #endif |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9187 #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
|
9188 || orig_keysym == XK_dead_cedilla |
|
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9189 #endif |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9190 #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
|
9191 || orig_keysym == XK_dead_breve |
|
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9192 #endif |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9193 #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
|
9194 || orig_keysym == XK_dead_ogonek |
|
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9195 #endif |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9196 #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
|
9197 || orig_keysym == XK_dead_caron |
|
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9198 #endif |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9199 #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
|
9200 || orig_keysym == XK_dead_doubleacute |
|
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9201 #endif |
|
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9202 #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
|
9203 || orig_keysym == XK_dead_abovedot |
|
5228
c094c1df2e87
(XTread_socket): Don't offset keysym here.
Richard M. Stallman <rms@gnu.org>
parents:
5156
diff
changeset
|
9204 #endif |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9205 || 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
|
9206 || 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
|
9207 /* 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
|
9208 || (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
|
9209 && ! (IsModifierKey (orig_keysym) |
|
4244
bc70363458c3
(XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents:
4147
diff
changeset
|
9210 #ifndef HAVE_X11R5 |
|
bc70363458c3
(XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents:
4147
diff
changeset
|
9211 #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
|
9212 || ((unsigned)(orig_keysym) == XK_Mode_switch) |
|
4244
bc70363458c3
(XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents:
4147
diff
changeset
|
9213 #endif |
|
bc70363458c3
(XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents:
4147
diff
changeset
|
9214 #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
|
9215 || ((unsigned)(orig_keysym) == XK_Num_Lock) |
|
4244
bc70363458c3
(XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents:
4147
diff
changeset
|
9216 #endif |
|
bc70363458c3
(XTread_socket) [! HAVE_X11R5]:
Richard M. Stallman <rms@gnu.org>
parents:
4147
diff
changeset
|
9217 #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
|
9218 )) |
| 286 | 9219 { |
| 2064 | 9220 if (temp_index == sizeof temp_buffer / sizeof (short)) |
| 9221 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
|
9222 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
|
9223 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
|
9224 bufp->code = keysym; |
|
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
9225 XSETFRAME (bufp->frame_or_window, f); |
|
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
9226 bufp->modifiers |
|
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
9227 = 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
|
9228 modifiers); |
| 708 | 9229 bufp->timestamp = event.xkey.time; |
| 286 | 9230 bufp++; |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9231 count++; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9232 numchars--; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9233 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9234 if (display_busy_cursor_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9235 if (keysym != XK_Return || minibuf_level == 0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9236 inhibit_busy_cursor = 2; |
| 286 | 9237 } |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9238 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
|
9239 { |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9240 register int i; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9241 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9242 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
|
9243 { |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9244 if (temp_index == sizeof temp_buffer / sizeof (short)) |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9245 temp_index = 0; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9246 temp_buffer[temp_index++] = copy_buffer[i]; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9247 bufp->kind = ascii_keystroke; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9248 bufp->code = copy_buffer[i]; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9249 XSETFRAME (bufp->frame_or_window, f); |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9250 bufp->modifiers |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9251 = 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
|
9252 modifiers); |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9253 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
|
9254 bufp++; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9255 } |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9256 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9257 count += nbytes; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9258 numchars -= nbytes; |
|
23567
5a0cdfd791a2
(XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents:
23515
diff
changeset
|
9259 |
|
5a0cdfd791a2
(XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents:
23515
diff
changeset
|
9260 if (keysym == NoSymbol) |
|
5a0cdfd791a2
(XTread_socket): Check the returned value of XmbLookupString more carefully.
Paul Eggert <eggert@twinsun.com>
parents:
23515
diff
changeset
|
9261 break; |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9262 } |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9263 else |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9264 abort (); |
| 286 | 9265 } |
| 2064 | 9266 else |
| 9267 abort (); | |
| 286 | 9268 } |
|
13898
dceb33c07f9e
(XTread_socket): Pass KeyPress events to the toolkit.
Richard M. Stallman <rms@gnu.org>
parents:
13884
diff
changeset
|
9269 goto OTHER; |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9270 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9271 /* 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
|
9272 FocusIn-EnterNotify FocusOut-LeaveNotify mess. If |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9273 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
|
9274 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
|
9275 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
|
9276 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
|
9277 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9278 case EnterNotify: |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9279 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9280 int from_menu_bar_p = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9281 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9282 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
|
9283 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9284 #ifdef LESSTIF_VERSION |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9285 /* 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
|
9286 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
|
9287 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
|
9288 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
|
9289 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
|
9290 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
|
9291 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
|
9292 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
|
9293 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
|
9294 value. |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9295 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9296 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
|
9297 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
|
9298 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9299 (gerd, LessTif 0.88.1). */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9300 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9301 if (!event.xcrossing.focus |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9302 && f |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9303 && f->output_data.x->menubar_widget) |
|
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 Window focus; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9306 int revert; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9307 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9308 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
|
9309 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
|
9310 from_menu_bar_p = 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9311 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9312 #endif /* LESSTIF_VERSION */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9313 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9314 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
|
9315 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9316 /* Avoid nasty pop/raise loops. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9317 if (f && (!(f->auto_raise) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9318 || !(f->auto_lower) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9319 || (event.xcrossing.time - enter_timestamp) > 500)) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9320 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9321 x_new_focus_frame (dpyinfo, f); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9322 enter_timestamp = event.xcrossing.time; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9323 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9324 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9325 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
|
9326 x_new_focus_frame (dpyinfo, 0); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9327 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9328 /* EnterNotify counts as mouse movement, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9329 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
|
9330 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
|
9331 note_mouse_movement (f, &event.xmotion); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9332 goto OTHER; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9333 } |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9334 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9335 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
|
9336 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
|
9337 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
|
9338 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
|
9339 if (f) |
|
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
9340 x_new_focus_frame (dpyinfo, f); |
|
13205
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
9341 |
|
13232
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9342 #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
|
9343 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
|
9344 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
|
9345 #endif |
|
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9346 |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9347 goto OTHER; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9348 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9349 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
|
9350 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
|
9351 if (f) |
|
7169
c21fcad6f1f5
(XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents:
7167
diff
changeset
|
9352 { |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9353 Lisp_Object frame; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9354 int from_menu_bar_p = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9355 |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9356 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
|
9357 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9358 /* 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
|
9359 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
|
9360 clear_mouse_face (dpyinfo); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9361 dpyinfo->mouse_face_mouse_frame = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9362 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9363 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9364 /* 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
|
9365 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
|
9366 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
|
9367 the mouse leaves the frame. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9368 if (any_help_event_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9369 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9370 XSETFRAME (frame, f); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9371 bufp->kind = HELP_EVENT; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9372 bufp->frame_or_window = Fcons (frame, Qnil); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9373 ++bufp, ++count, --numchars; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9374 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9375 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9376 #ifdef LESSTIF_VERSION |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9377 /* 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
|
9378 EnterNotify case. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9379 if (!event.xcrossing.focus |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9380 && f->output_data.x->menubar_widget) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9381 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9382 Window focus; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9383 int revert; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9384 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
|
9385 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
|
9386 from_menu_bar_p = 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9387 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9388 #endif /* LESSTIF_VERSION */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9389 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9390 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
|
9391 x_mouse_leave (dpyinfo); |
|
7169
c21fcad6f1f5
(XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents:
7167
diff
changeset
|
9392 else |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9393 { |
|
11536
c4d3218acd7e
(x_focus_frame, x_focus_event_frame, x_highlight_frame):
Karl Heuer <kwzh@gnu.org>
parents:
11436
diff
changeset
|
9394 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
|
9395 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
|
9396 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
|
9397 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
|
9398 } |
|
7169
c21fcad6f1f5
(XTread_socket): Only top window cares about LeaveNotify.
Karl Heuer <kwzh@gnu.org>
parents:
7167
diff
changeset
|
9399 } |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9400 goto OTHER; |
|
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 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
|
9403 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
|
9404 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
|
9405 && 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
|
9406 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
|
9407 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
|
9408 x_new_focus_frame (dpyinfo, 0); |
|
13205
8eac10febc8e
(x_connection_signal_1): New function.
Richard M. Stallman <rms@gnu.org>
parents:
12966
diff
changeset
|
9409 |
|
13232
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9410 #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
|
9411 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
|
9412 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
|
9413 #endif |
|
e31057e55df7
(x_term_init, XTread_socket): Add HAVE_X_I18N support.
Richard M. Stallman <rms@gnu.org>
parents:
13205
diff
changeset
|
9414 |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9415 goto OTHER; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9416 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9417 case MotionNotify: |
| 286 | 9418 { |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9419 previous_help_echo = help_echo; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9420 help_echo = Qnil; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9421 |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9422 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
|
9423 && 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
|
9424 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
|
9425 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
|
9426 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
|
9427 |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9428 if (f) |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9429 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
|
9430 else |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9431 { |
|
25795
84921c27b2b5
(XTread_socket) <MotionNotify>: Change #ifdef
Gerd Moellmann <gerd@gnu.org>
parents:
25716
diff
changeset
|
9432 #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
|
9433 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
|
9434 = 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
|
9435 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9436 if (bar) |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9437 x_scroll_bar_note_movement (bar, &event); |
|
25795
84921c27b2b5
(XTread_socket) <MotionNotify>: Change #ifdef
Gerd Moellmann <gerd@gnu.org>
parents:
25716
diff
changeset
|
9438 #endif /* USE_TOOLKIT_SCROLL_BARS */ |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9439 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9440 /* 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
|
9441 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
|
9442 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
|
9443 } |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9444 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9445 /* 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
|
9446 has changed, generate a HELP_EVENT. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9447 if (STRINGP (help_echo) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9448 || STRINGP (previous_help_echo)) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9449 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9450 Lisp_Object frame; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9451 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9452 if (f) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9453 XSETFRAME (frame, f); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9454 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9455 frame = Qnil; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9456 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9457 any_help_event_p = 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9458 bufp->kind = HELP_EVENT; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9459 bufp->frame_or_window = Fcons (frame, help_echo); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9460 ++bufp, ++count, --numchars; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9461 } |
|
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 goto OTHER; |
| 286 | 9464 } |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9465 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9466 case ConfigureNotify: |
|
17953
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
9467 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
|
9468 if (f) |
|
3030
2c5ea1c98256
(XTread_socket): For ConfigureNotify event,
Richard M. Stallman <rms@gnu.org>
parents:
3016
diff
changeset
|
9469 { |
|
25716
e2d5cd96727b
(x_scroll_bar_handle_click): Compile only if
Gerd Moellmann <gerd@gnu.org>
parents:
25692
diff
changeset
|
9470 #ifndef USE_X_TOOLKIT |
|
24489
abf5b4802f9b
(XTread_socket) <ConfigureNotify>:
Karl Heuer <kwzh@gnu.org>
parents:
24484
diff
changeset
|
9471 int rows = PIXEL_TO_CHAR_HEIGHT (f, event.xconfigure.height); |
|
abf5b4802f9b
(XTread_socket) <ConfigureNotify>:
Karl Heuer <kwzh@gnu.org>
parents:
24484
diff
changeset
|
9472 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
|
9473 |
|
11436
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
9474 /* 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
|
9475 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
|
9476 of the EmacsFrame widget. */ |
|
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
9477 |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9478 /* 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
|
9479 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
|
9480 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
|
9481 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
|
9482 || 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
|
9483 || 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
|
9484 || 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
|
9485 { |
|
25360
2f3ad0a21be5
Call change_frame_size and do_pending_window_change with
Gerd Moellmann <gerd@gnu.org>
parents:
25328
diff
changeset
|
9486 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
|
9487 SET_FRAME_GARBAGED (f); |
|
16491
7094452bc337
(cancel_mouse_face): New function. Code copied from
Richard M. Stallman <rms@gnu.org>
parents:
16483
diff
changeset
|
9488 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
|
9489 } |
|
11436
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
9490 #endif |
|
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
9491 |
|
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
9492 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
|
9493 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
|
9494 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9495 /* 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
|
9496 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
|
9497 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
|
9498 &f->output_data.x->top_pos); |
|
d25d2472df51
(XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents:
17963
diff
changeset
|
9499 |
|
d25d2472df51
(XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents:
17963
diff
changeset
|
9500 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
|
9501 { |
|
d25d2472df51
(XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents:
17963
diff
changeset
|
9502 /* 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
|
9503 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
|
9504 f->output_data.x->win_gravity = NorthWestGravity; |
|
d25d2472df51
(XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents:
17963
diff
changeset
|
9505 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
|
9506 } |
|
20182
9f3dd970927e
(XTread_socket): Check for bogus (0,0) location.
Karl Heuer <kwzh@gnu.org>
parents:
20180
diff
changeset
|
9507 #ifdef USE_MOTIF |
|
9f3dd970927e
(XTread_socket): Check for bogus (0,0) location.
Karl Heuer <kwzh@gnu.org>
parents:
20180
diff
changeset
|
9508 /* 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
|
9509 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
|
9510 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
|
9511 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
|
9512 { |
|
9f3dd970927e
(XTread_socket): Check for bogus (0,0) location.
Karl Heuer <kwzh@gnu.org>
parents:
20180
diff
changeset
|
9513 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
|
9514 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
|
9515 } |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9516 #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
|
9517 } |
|
11436
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
9518 goto OTHER; |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9519 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9520 case ButtonPress: |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9521 case ButtonRelease: |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
9522 { |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9523 /* 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
|
9524 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
|
9525 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
|
9526 int tool_bar_p = 0; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9527 |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9528 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
|
9529 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
|
9530 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9531 if (dpyinfo->grabbed |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9532 && last_mouse_frame |
|
10274
83aaf59dabbe
(XTupdate_begin): Fix backward test in previous change.
Richard M. Stallman <rms@gnu.org>
parents:
10223
diff
changeset
|
9533 && 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
|
9534 f = last_mouse_frame; |
|
83aaf59dabbe
(XTupdate_begin): Fix backward test in previous change.
Richard M. Stallman <rms@gnu.org>
parents:
10223
diff
changeset
|
9535 else |
|
12657
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9536 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
|
9537 |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9538 if (f) |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9539 { |
|
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
9540 /* 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
|
9541 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
|
9542 && 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
|
9543 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9544 Lisp_Object window; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9545 int p, x, y; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9546 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9547 x = event.xbutton.x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9548 y = event.xbutton.y; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9549 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9550 /* Set x and y. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9551 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
|
9552 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
|
9553 { |
|
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
9554 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
|
9555 tool_bar_p = 1; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9556 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9557 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9558 |
|
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
9559 if (!tool_bar_p) |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9560 if (!dpyinfo->x_focus_frame |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9561 || f == dpyinfo->x_focus_frame) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9562 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
|
9563 } |
|
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
9564 else |
|
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
9565 { |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9566 #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
|
9567 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
|
9568 = 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
|
9569 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9570 if (bar) |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9571 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
|
9572 #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
|
9573 } |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9574 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9575 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
|
9576 { |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9577 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
|
9578 last_mouse_frame = f; |
|
23643
701b6bdc7a22
(XTread_socket): ButtonPress clears f->mouse_moved.
Karl Heuer <kwzh@gnu.org>
parents:
23567
diff
changeset
|
9579 /* Ignore any mouse motion that happened |
|
701b6bdc7a22
(XTread_socket): ButtonPress clears f->mouse_moved.
Karl Heuer <kwzh@gnu.org>
parents:
23567
diff
changeset
|
9580 before this event; any subsequent mouse-movement |
|
701b6bdc7a22
(XTread_socket): ButtonPress clears f->mouse_moved.
Karl Heuer <kwzh@gnu.org>
parents:
23567
diff
changeset
|
9581 Emacs events should reflect only motion after |
|
701b6bdc7a22
(XTread_socket): ButtonPress clears f->mouse_moved.
Karl Heuer <kwzh@gnu.org>
parents:
23567
diff
changeset
|
9582 the ButtonPress. */ |
|
23701
6c0896abbbd4
(XTread_socket): Fix previous change in case F == 0.
Karl Heuer <kwzh@gnu.org>
parents:
23684
diff
changeset
|
9583 if (f != 0) |
|
6c0896abbbd4
(XTread_socket): Fix previous change in case F == 0.
Karl Heuer <kwzh@gnu.org>
parents:
23684
diff
changeset
|
9584 f->mouse_moved = 0; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9585 |
|
25544
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
9586 if (!tool_bar_p) |
|
693ca9ba497a
Change spelling of `toolbar' to `tool_bar' or `tool-bar'.
Gerd Moellmann <gerd@gnu.org>
parents:
25541
diff
changeset
|
9587 last_tool_bar_item = -1; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9588 if (display_busy_cursor_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9589 inhibit_busy_cursor = 2; |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9590 } |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9591 else |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9592 { |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9593 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
|
9594 } |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9595 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9596 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
|
9597 { |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9598 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
|
9599 bufp++; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9600 count++; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9601 numchars--; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9602 } |
|
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
9603 |
|
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
9604 #ifdef USE_X_TOOLKIT |
|
12657
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9605 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
|
9606 /* For a down-event in the menu bar, |
|
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9607 don't pass it to Xt right now. |
|
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9608 Instead, save it away |
|
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9609 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
|
9610 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
|
9611 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
|
9612 /* 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
|
9613 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
|
9614 && event.xbutton.x >= 0 |
|
21b6b8f50143
(XTread_socket): Verify a ButtonPress was actually in the
Richard M. Stallman <rms@gnu.org>
parents:
13507
diff
changeset
|
9615 && 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
|
9616 && event.xbutton.y >= 0 |
|
21b6b8f50143
(XTread_socket): Verify a ButtonPress was actually in the
Richard M. Stallman <rms@gnu.org>
parents:
13507
diff
changeset
|
9617 && 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
|
9618 && event.xbutton.same_screen) |
|
12657
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9619 { |
|
15711
099dc465c948
(SET_SAVED_MENU_EVENT): New macro.
Karl Heuer <kwzh@gnu.org>
parents:
15639
diff
changeset
|
9620 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
|
9621 XSETFRAME (last_mouse_press_frame, f); |
|
15793
fc460a98a7f9
(last_mouse_press_frame): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15711
diff
changeset
|
9622 } |
|
15803
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
9623 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
|
9624 { |
|
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
9625 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
|
9626 goto OTHER; |
|
15803
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
9627 } |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9628 |
|
15803
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
9629 #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
|
9630 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
|
9631 else if (event.type == ButtonRelease) |
|
fc460a98a7f9
(last_mouse_press_frame): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
15711
diff
changeset
|
9632 { |
|
15803
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
9633 if (!NILP (last_mouse_press_frame)) |
| 15794 | 9634 { |
|
15803
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
9635 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
|
9636 if (f->output_data.x) |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9637 SET_SAVED_BUTTON_EVENT; |
| 15794 | 9638 } |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9639 else |
|
15808
3afa38a18102
(XTread_socket): Delete the code to pass menu bar keys
Richard M. Stallman <rms@gnu.org>
parents:
15806
diff
changeset
|
9640 goto OTHER; |
|
12657
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9641 } |
|
15803
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
9642 #endif /* USE_MOTIF */ |
|
12657
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9643 else |
|
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9644 goto OTHER; |
|
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
9645 #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
|
9646 } |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9647 break; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9648 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9649 case CirculateNotify: |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9650 goto OTHER; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9651 |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9652 case CirculateRequest: |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9653 goto OTHER; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9654 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9655 case VisibilityNotify: |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9656 goto OTHER; |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9657 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9658 case MappingNotify: |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9659 /* 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
|
9660 local cache. */ |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9661 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
|
9662 { |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9663 case MappingModifier: |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9664 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
|
9665 /* 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
|
9666 case MappingKeyboard: |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9667 XRefreshKeyboardMapping (&event.xmapping); |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9668 } |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9669 goto OTHER; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9670 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9671 default: |
|
13898
dceb33c07f9e
(XTread_socket): Pass KeyPress events to the toolkit.
Richard M. Stallman <rms@gnu.org>
parents:
13884
diff
changeset
|
9672 OTHER: |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9673 #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
|
9674 BLOCK_INPUT; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9675 XtDispatchEvent (&event); |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9676 UNBLOCK_INPUT; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
9677 #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
|
9678 break; |
|
1436
e7c5faab6571
* xterm.c (compose_status): New variable.
Jim Blandy <jimb@redhat.com>
parents:
1389
diff
changeset
|
9679 } |
| 286 | 9680 } |
| 9681 } | |
| 9682 | |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9683 out:; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9684 |
|
8485
6e4b40c80021
(XTread_socket): Don't test X_IO_BUG; make that code unconditional.
Richard M. Stallman <rms@gnu.org>
parents:
8437
diff
changeset
|
9685 /* 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
|
9686 when the window is destroyed. Detect that. (1994.) */ |
|
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
9687 if (! event_found) |
|
7916
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
9688 { |
|
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
9689 /* 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
|
9690 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
|
9691 B. Bretthauer, 1994 */ |
|
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
9692 x_noop_count++; |
|
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
9693 if (x_noop_count >= 100) |
|
7916
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
9694 { |
|
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
9695 x_noop_count=0; |
|
12657
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9696 |
|
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9697 if (next_noop_dpyinfo == 0) |
|
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9698 next_noop_dpyinfo = x_display_list; |
|
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9699 |
|
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9700 XNoOp (next_noop_dpyinfo->display); |
|
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9701 |
|
05b7a5d25df6
(next_noop_dpyinfo): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
12530
diff
changeset
|
9702 /* 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
|
9703 next_noop_dpyinfo = next_noop_dpyinfo->next; |
|
7916
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
9704 } |
|
50e9e0c8806a
(x_noop_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
7905
diff
changeset
|
9705 } |
|
5753
eb44ecad5557
(XTread_socket): Add X_IO_BUG conditional.
Richard M. Stallman <rms@gnu.org>
parents:
5740
diff
changeset
|
9706 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9707 /* 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
|
9708 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
|
9709 /* ??? 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
|
9710 if (pending_autoraise_frame) |
|
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
9711 { |
|
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
9712 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
|
9713 pending_autoraise_frame = 0; |
|
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
9714 } |
|
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
9715 |
| 286 | 9716 UNBLOCK_INPUT; |
| 9717 return count; | |
| 9718 } | |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9719 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9720 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9721 |
| 286 | 9722 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9723 /*********************************************************************** |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9724 Text Cursor |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9725 ***********************************************************************/ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9726 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9727 /* 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
|
9728 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
|
9729 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
|
9730 line after HPOS has been written. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9731 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9732 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9733 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
|
9734 struct window *w; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9735 int hpos, n; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9736 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9737 if (updated_area == TEXT_AREA |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9738 && 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
|
9739 && hpos <= w->phys_cursor.hpos |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9740 && (n < 0 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9741 || hpos + n > w->phys_cursor.hpos)) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9742 w->phys_cursor_on_p = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9743 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9744 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9745 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9746 /* 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
|
9747 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
|
9748 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
|
9749 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
|
9750 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9751 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
|
9752 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
|
9753 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
|
9754 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9755 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9756 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
|
9757 struct window *w; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9758 struct glyph_row *row; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9759 GC gc; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9760 int whole_line_p; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9761 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9762 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
|
9763 XRectangle clip_rect; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9764 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
|
9765 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9766 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
|
9767 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9768 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
|
9769 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
|
9770 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
|
9771 clip_rect.width = window_width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9772 clip_rect.height = row->visible_height; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9773 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9774 /* 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
|
9775 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
|
9776 if (whole_line_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9777 { |
| 25465 | 9778 clip_rect.x -= FRAME_X_LEFT_FLAGS_AREA_WIDTH (f); |
| 9779 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
|
9780 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9781 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9782 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
|
9783 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9784 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9785 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9786 /* 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
|
9787 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9788 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9789 x_draw_hollow_cursor (w, row) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9790 struct window *w; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9791 struct glyph_row *row; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9792 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9793 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
|
9794 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
|
9795 Display *dpy = FRAME_X_DISPLAY (f); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9796 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
|
9797 XGCValues xgcv; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9798 struct glyph *cursor_glyph; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9799 GC gc; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9800 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9801 /* 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
|
9802 coordinates. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9803 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
|
9804 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
|
9805 + row->ascent - w->phys_cursor_ascent); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9806 h = row->height - 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9807 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9808 /* 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
|
9809 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
|
9810 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
|
9811 if (cursor_glyph == NULL) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9812 return; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9813 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9814 /* 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
|
9815 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
|
9816 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
|
9817 width instead. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9818 wd = cursor_glyph->pixel_width - 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9819 if (cursor_glyph->type == STRETCH_GLYPH |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9820 && !x_stretch_cursor_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9821 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
|
9822 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9823 /* 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
|
9824 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
|
9825 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
|
9826 if (dpyinfo->scratch_cursor_gc) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9827 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
|
9828 else |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9829 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
|
9830 GCForeground, &xgcv); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9831 gc = dpyinfo->scratch_cursor_gc; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9832 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9833 /* 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
|
9834 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
|
9835 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
|
9836 XSetClipMask (dpy, gc, None); |
|
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 |
|
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 /* 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
|
9841 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9842 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
|
9843 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
|
9844 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
|
9845 --gerd. */ |
|
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 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9848 x_draw_bar_cursor (w, row) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9849 struct window *w; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9850 struct glyph_row *row; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9851 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9852 /* 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
|
9853 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
|
9854 glyphs and mini-buffer. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9855 if (w->phys_cursor.hpos < row->used[TEXT_AREA]) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9856 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9857 struct frame *f = XFRAME (w->frame); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9858 struct glyph *cursor_glyph; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9859 GC gc; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9860 int x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9861 unsigned long mask; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9862 XGCValues xgcv; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9863 Display *dpy; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9864 Window window; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9865 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9866 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
|
9867 if (cursor_glyph == NULL) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9868 return; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9869 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9870 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
|
9871 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
|
9872 xgcv.graphics_exposures = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9873 mask = GCForeground | GCBackground | GCGraphicsExposures; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9874 dpy = FRAME_X_DISPLAY (f); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9875 window = FRAME_X_WINDOW (f); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9876 gc = FRAME_X_DISPLAY_INFO (f)->scratch_cursor_gc; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9877 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9878 if (gc) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9879 XChangeGC (dpy, gc, mask, &xgcv); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9880 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9881 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9882 gc = XCreateGC (dpy, window, mask, &xgcv); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9883 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
|
9884 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9885 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9886 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
|
9887 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
|
9888 XFillRectangle (dpy, window, gc, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9889 x, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9890 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
|
9891 min (cursor_glyph->pixel_width, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9892 f->output_data.x->cursor_width), |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9893 row->height); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9894 XSetClipMask (dpy, gc, None); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9895 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9896 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9897 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9898 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9899 /* 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
|
9900 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
|
9901 is is about to be rewritten. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9902 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9903 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9904 x_clear_cursor (w) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9905 struct window *w; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9906 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9907 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
|
9908 x_update_window_cursor (w, 0); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9909 } |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9912 /* 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
|
9913 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
|
9914 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9915 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9916 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
|
9917 struct window *w; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9918 struct glyph_row *row; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9919 enum draw_glyphs_face hl; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9920 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9921 /* 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
|
9922 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
|
9923 glyphs and mini-buffer. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9924 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
|
9925 { |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
9926 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
|
9927 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
|
9928 hl, 0, 0, 0); |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
9929 |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
9930 /* 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
|
9931 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
|
9932 are redrawn. */ |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
9933 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
|
9934 { |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
9935 if (row > w->current_matrix->rows |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
9936 && MATRIX_ROW_OVERLAPS_SUCC_P (row - 1)) |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
9937 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
|
9938 |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
9939 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
|
9940 && MATRIX_ROW_OVERLAPS_PRED_P (row + 1)) |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
9941 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
|
9942 } |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
9943 } |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9944 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9945 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9946 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9947 /* 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
|
9948 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9949 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9950 x_erase_phys_cursor (w) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9951 struct window *w; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9952 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9953 struct frame *f = XFRAME (w->frame); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9954 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
|
9955 int hpos = w->phys_cursor.hpos; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9956 int vpos = w->phys_cursor.vpos; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9957 int mouse_face_here_p = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9958 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
|
9959 struct glyph_row *cursor_row; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9960 struct glyph *cursor_glyph; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9961 enum draw_glyphs_face hl; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9962 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9963 /* 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
|
9964 screen. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9965 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
|
9966 goto mark_cursor_off; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9967 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9968 /* 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
|
9969 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
|
9970 if (vpos >= active_glyphs->nrows) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9971 goto mark_cursor_off; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9972 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9973 /* 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
|
9974 can do. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9975 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
|
9976 if (!cursor_row->enabled_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9977 goto mark_cursor_off; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9978 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9979 /* 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
|
9980 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
|
9981 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
|
9982 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
|
9983 cursor glyph at hand. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9984 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
|
9985 goto mark_cursor_off; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9986 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9987 /* 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
|
9988 we clear the cursor. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9989 if (w == XWINDOW (dpyinfo->mouse_face_window) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9990 && (vpos > dpyinfo->mouse_face_beg_row |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9991 || (vpos == dpyinfo->mouse_face_beg_row |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9992 && hpos >= dpyinfo->mouse_face_beg_col)) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9993 && (vpos < dpyinfo->mouse_face_end_row |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9994 || (vpos == dpyinfo->mouse_face_end_row |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9995 && hpos < dpyinfo->mouse_face_end_col)) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9996 /* 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
|
9997 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
|
9998 mouse highlighting does not. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
9999 && cursor_row->used[TEXT_AREA] > hpos) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10000 mouse_face_here_p = 1; |
|
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 /* 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
|
10003 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
|
10004 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10005 int x; |
| 25546 | 10006 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
|
10007 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10008 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
|
10009 if (cursor_glyph == NULL) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10010 goto mark_cursor_off; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10011 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10012 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
|
10013 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10014 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
|
10015 x, |
| 25546 | 10016 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
|
10017 cursor_row->y)), |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10018 cursor_glyph->pixel_width, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10019 cursor_row->visible_height, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10020 False); |
|
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 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10023 /* 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
|
10024 if (mouse_face_here_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10025 hl = DRAW_MOUSE_FACE; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10026 else if (cursor_row->inverse_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10027 hl = DRAW_INVERSE_VIDEO; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10028 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10029 hl = DRAW_NORMAL_TEXT; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10030 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
|
10031 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10032 mark_cursor_off: |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10033 w->phys_cursor_on_p = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10034 w->phys_cursor_type = NO_CURSOR; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10035 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10036 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10037 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10038 /* 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
|
10039 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
|
10040 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
|
10041 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10042 void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10043 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
|
10044 struct window *w; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10045 int on, hpos, vpos, x, y; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10046 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10047 struct frame *f = XFRAME (w->frame); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10048 int new_cursor_type; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10049 struct glyph_matrix *current_glyphs; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10050 struct glyph_row *glyph_row; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10051 struct glyph *glyph; |
|
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
10052 |
|
2235
80e0d36bbb77
* xterm.c (x_display_box_cursor, x_display_bar_cursor): Don't
Jim Blandy <jimb@redhat.com>
parents:
2195
diff
changeset
|
10053 /* 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
|
10054 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
|
10055 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
|
10056 window. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10057 if (! FRAME_VISIBLE_P (f) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10058 || FRAME_GARBAGED_P (f) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10059 || vpos >= w->current_matrix->nrows |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10060 || hpos >= w->current_matrix->matrix_w) |
|
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
10061 return; |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
10062 |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
10063 /* 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
|
10064 if (!on && !w->phys_cursor_on_p) |
|
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
10065 return; |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
10066 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10067 current_glyphs = w->current_matrix; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10068 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
|
10069 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
|
10070 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10071 /* 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
|
10072 display the cursor. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10073 if (!glyph_row->enabled_p) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10074 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10075 w->phys_cursor_on_p = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10076 return; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10077 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10078 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10079 xassert (interrupt_input_blocked); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10080 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10081 /* 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
|
10082 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
|
10083 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
|
10084 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
|
10085 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
|
10086 box cursor. */ |
|
25191
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10087 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
|
10088 && 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
|
10089 && 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
|
10090 { |
|
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10091 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
|
10092 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
|
10093 else |
|
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10094 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
|
10095 } |
|
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10096 else |
|
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10097 { |
|
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10098 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
|
10099 || 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
|
10100 { |
|
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10101 if (MINI_WINDOW_P (w)) |
|
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10102 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
|
10103 else |
|
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10104 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
|
10105 } |
|
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10106 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
|
10107 new_cursor_type = NO_CURSOR; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10108 else |
|
25191
3a5376feb9aa
(x_display_and_set_cursor): If cursor_in_echo_area,
Gerd Moellmann <gerd@gnu.org>
parents:
25189
diff
changeset
|
10109 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
|
10110 } |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10111 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10112 /* 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
|
10113 it is in the wrong place, or the cursor type is not what we want, |
| 286 | 10114 erase it. */ |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10115 if (w->phys_cursor_on_p |
| 286 | 10116 && (!on |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10117 || w->phys_cursor.x != x |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10118 || w->phys_cursor.y != y |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10119 || 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
|
10120 x_erase_phys_cursor (w); |
|
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 /* 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
|
10123 display it. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10124 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
|
10125 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10126 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
|
10127 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
|
10128 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10129 /* 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
|
10130 of them may need the information. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10131 w->phys_cursor.x = x; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10132 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
|
10133 w->phys_cursor.hpos = hpos; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10134 w->phys_cursor.vpos = vpos; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10135 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
|
10136 w->phys_cursor_on_p = 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10137 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10138 switch (new_cursor_type) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10139 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10140 case HOLLOW_BOX_CURSOR: |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10141 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
|
10142 break; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10143 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10144 case FILLED_BOX_CURSOR: |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10145 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
|
10146 break; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10147 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10148 case BAR_CURSOR: |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10149 x_draw_bar_cursor (w, glyph_row); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10150 break; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10151 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10152 case NO_CURSOR: |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10153 break; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10154 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10155 default: |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10156 abort (); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10157 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10158 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10159 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10160 #ifndef XFlush |
| 771 | 10161 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
|
10162 XFlush (FRAME_X_DISPLAY (f)); |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10163 #endif |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10164 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10165 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10166 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10167 /* 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
|
10168 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
|
10169 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
|
10170 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
|
10171 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
|
10172 |
| 21514 | 10173 void |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10174 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
|
10175 struct window *w; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10176 int on, hpos, vpos, x, y; |
| 286 | 10177 { |
|
5872
6389c826f847
(x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents:
5825
diff
changeset
|
10178 BLOCK_INPUT; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10179 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
|
10180 UNBLOCK_INPUT; |
|
80a5aedfb4c7
(XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents:
12192
diff
changeset
|
10181 } |
|
80a5aedfb4c7
(XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents:
12192
diff
changeset
|
10182 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10183 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10184 /* 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
|
10185 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
|
10186 |
| 21514 | 10187 void |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10188 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
|
10189 struct frame *f; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10190 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10191 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
|
10192 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10193 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10194 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10195 /* 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
|
10196 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
|
10197 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10198 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10199 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
|
10200 struct window *w; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10201 int on_p; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10202 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10203 while (w) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10204 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10205 if (!NILP (w->hchild)) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10206 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
|
10207 else if (!NILP (w->vchild)) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10208 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
|
10209 else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10210 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
|
10211 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10212 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
|
10213 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10214 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10215 |
|
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 /* 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
|
10218 of ON. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10219 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10220 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10221 x_update_window_cursor (w, on) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10222 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
|
10223 int on; |
|
80a5aedfb4c7
(XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents:
12192
diff
changeset
|
10224 { |
|
80a5aedfb4c7
(XTread_socket): Turn off meta, super, hyper and alt bits
Richard M. Stallman <rms@gnu.org>
parents:
12192
diff
changeset
|
10225 BLOCK_INPUT; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10226 x_display_and_set_cursor (w, on, w->phys_cursor.hpos, w->phys_cursor.vpos, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10227 w->phys_cursor.x, w->phys_cursor.y); |
|
5872
6389c826f847
(x_display_cursor, process_expose_from_menu): Block input.
Karl Heuer <kwzh@gnu.org>
parents:
5825
diff
changeset
|
10228 UNBLOCK_INPUT; |
| 286 | 10229 } |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10230 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10231 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10232 |
| 286 | 10233 |
| 10234 /* Icons. */ | |
| 10235 | |
| 771 | 10236 /* 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
|
10237 when we get an expose event for it. */ |
| 286 | 10238 |
| 21514 | 10239 void |
| 771 | 10240 refreshicon (f) |
| 10241 struct frame *f; | |
| 286 | 10242 { |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10243 /* Normally, the window manager handles this function. */ |
| 286 | 10244 } |
| 10245 | |
|
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
10246 /* Make the x-window of frame F use the gnu icon bitmap. */ |
| 286 | 10247 |
| 10248 int | |
|
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
10249 x_bitmap_icon (f, file) |
| 771 | 10250 struct frame *f; |
|
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
10251 Lisp_Object file; |
| 286 | 10252 { |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10253 int bitmap_id; |
| 286 | 10254 |
|
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
10255 if (FRAME_X_WINDOW (f) == 0) |
| 286 | 10256 return 1; |
| 10257 | |
|
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
10258 /* 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
|
10259 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
|
10260 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
|
10261 f->output_data.x->icon_bitmap = 0; |
|
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
10262 |
|
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
10263 if (STRINGP (file)) |
|
9542
f8b7a65a94bc
(x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents:
9537
diff
changeset
|
10264 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
|
10265 else |
|
f8b7a65a94bc
(x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents:
9537
diff
changeset
|
10266 { |
|
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
10267 /* 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
|
10268 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
|
10269 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
|
10270 = 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
|
10271 gnu_width, gnu_height); |
|
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
10272 |
|
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
10273 /* 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
|
10274 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
|
10275 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
|
10276 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
|
10277 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
|
10278 |
|
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
10279 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
|
10280 } |
|
f8b7a65a94bc
(x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents:
9537
diff
changeset
|
10281 |
|
f8b7a65a94bc
(x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents:
9537
diff
changeset
|
10282 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
|
10283 f->output_data.x->icon_bitmap = bitmap_id; |
| 286 | 10284 |
| 10285 return 0; | |
| 10286 } | |
| 10287 | |
| 10288 | |
|
12074
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10289 /* 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
|
10290 Use ICON_NAME as the text. */ |
| 286 | 10291 |
| 10292 int | |
| 771 | 10293 x_text_icon (f, icon_name) |
| 10294 struct frame *f; | |
| 286 | 10295 char *icon_name; |
| 10296 { | |
|
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
10297 if (FRAME_X_WINDOW (f) == 0) |
| 286 | 10298 return 1; |
| 10299 | |
|
12074
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10300 #ifdef HAVE_X11R4 |
|
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10301 { |
|
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10302 XTextProperty text; |
|
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10303 text.value = (unsigned char *) icon_name; |
|
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10304 text.encoding = XA_STRING; |
|
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10305 text.format = 8; |
|
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10306 text.nitems = strlen (icon_name); |
|
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10307 #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
|
10308 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
|
10309 &text); |
|
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10310 #else /* not USE_X_TOOLKIT */ |
|
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10311 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
|
10312 #endif /* not USE_X_TOOLKIT */ |
|
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10313 } |
|
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10314 #else /* not HAVE_X11R4 */ |
|
111aadc2521a
(x_text_icon): Do call XSetIconName or XSetWMIconName.
Karl Heuer <kwzh@gnu.org>
parents:
12000
diff
changeset
|
10315 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
|
10316 #endif /* not HAVE_X11R4 */ |
|
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
10317 |
|
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
10318 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
|
10319 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
|
10320 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
|
10321 x_wm_set_icon_pixmap (f, 0); |
| 286 | 10322 |
| 10323 return 0; | |
| 10324 } | |
| 10325 | |
|
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10326 #define X_ERROR_MESSAGE_SIZE 200 |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10327 |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10328 /* If non-nil, this should be a string. |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10329 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
|
10330 |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10331 static Lisp_Object x_error_message_string; |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10332 |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10333 /* 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
|
10334 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
|
10335 x_catch_errors is in effect. */ |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10336 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10337 static void |
|
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10338 x_error_catcher (display, error) |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10339 Display *display; |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10340 XErrorEvent *error; |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10341 { |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10342 XGetErrorText (display, error->error_code, |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10343 XSTRING (x_error_message_string)->data, |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10344 X_ERROR_MESSAGE_SIZE); |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10345 } |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10346 |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10347 /* 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
|
10348 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
|
10349 operating on. |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10350 |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10351 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
|
10352 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
|
10353 stored in x_error_message_string. |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10354 |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10355 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
|
10356 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
|
10357 |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10358 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
|
10359 |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10360 void x_check_errors (); |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10361 static Lisp_Object x_catch_errors_unwind (); |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10362 |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10363 int |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10364 x_catch_errors (dpy) |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10365 Display *dpy; |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10366 { |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10367 int count = specpdl_ptr - specpdl; |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10368 |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10369 /* 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
|
10370 XSync (dpy, False); |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10371 |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10372 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
|
10373 |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10374 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
|
10375 XSTRING (x_error_message_string)->data[0] = 0; |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10376 |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10377 return count; |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10378 } |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10379 |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10380 /* 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
|
10381 |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10382 static Lisp_Object |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10383 x_catch_errors_unwind (old_val) |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10384 Lisp_Object old_val; |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10385 { |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10386 x_error_message_string = old_val; |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10387 return Qnil; |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10388 } |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10389 |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10390 /* 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
|
10391 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
|
10392 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
|
10393 |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10394 void |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10395 x_check_errors (dpy, format) |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10396 Display *dpy; |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10397 char *format; |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10398 { |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10399 /* 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
|
10400 XSync (dpy, False); |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10401 |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10402 if (XSTRING (x_error_message_string)->data[0]) |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10403 error (format, XSTRING (x_error_message_string)->data); |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10404 } |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10405 |
|
17953
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10406 /* 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
|
10407 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
|
10408 |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10409 int |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10410 x_had_errors_p (dpy) |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10411 Display *dpy; |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10412 { |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10413 /* 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
|
10414 XSync (dpy, False); |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10415 |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10416 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
|
10417 } |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10418 |
|
17953
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10419 /* 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
|
10420 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10421 void |
|
17953
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10422 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
|
10423 Display *dpy; |
|
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10424 { |
|
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10425 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
|
10426 } |
|
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10427 |
|
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10428 /* 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
|
10429 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
|
10430 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
|
10431 the corresponding call to x_catch_errors. */ |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10432 |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10433 void |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10434 x_uncatch_errors (dpy, count) |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10435 Display *dpy; |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10436 int count; |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10437 { |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10438 unbind_to (count, Qnil); |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10439 } |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10440 |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10441 #if 0 |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10442 static unsigned int x_wire_count; |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10443 x_trace_wire () |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10444 { |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10445 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
|
10446 } |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10447 #endif /* ! 0 */ |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10448 |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10449 |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10450 /* 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
|
10451 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
|
10452 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
|
10453 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
|
10454 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
|
10455 |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10456 static SIGTYPE |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10457 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
|
10458 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
|
10459 { |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10460 #ifdef USG |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10461 /* USG systems forget handlers when they are used; |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10462 must reestablish each time */ |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10463 signal (signalnum, x_connection_signal); |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10464 #endif /* USG */ |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10465 } |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10466 |
| 621 | 10467 /* Handling X errors. */ |
| 10468 | |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10469 /* 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
|
10470 |
| 621 | 10471 static SIGTYPE |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10472 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
|
10473 Display *display; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10474 char *error_message; |
| 621 | 10475 { |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10476 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
|
10477 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
|
10478 |
|
14489
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
10479 /* 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
|
10480 |
|
17825
281d99590839
(dumpglyphs): Draw glyphs one by one if the font for
Kenichi Handa <handa@m17n.org>
parents:
17720
diff
changeset
|
10481 #ifdef USE_X_TOOLKIT |
|
16179
7f8ce4d3e955
(x_connection_closed): Call XtCloseDisplay.
Richard M. Stallman <rms@gnu.org>
parents:
16104
diff
changeset
|
10482 XtCloseDisplay (display); |
|
17825
281d99590839
(dumpglyphs): Draw glyphs one by one if the font for
Kenichi Handa <handa@m17n.org>
parents:
17720
diff
changeset
|
10483 #endif |
|
16179
7f8ce4d3e955
(x_connection_closed): Call XtCloseDisplay.
Richard M. Stallman <rms@gnu.org>
parents:
16104
diff
changeset
|
10484 |
|
14489
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
10485 dpyinfo->display = 0; |
|
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
10486 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10487 /* 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
|
10488 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
|
10489 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
|
10490 { |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10491 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
|
10492 minibuf_frame |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10493 = 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
|
10494 if (FRAME_X_P (XFRAME (frame)) |
|
bf33c9179a6b
(x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents:
10755
diff
changeset
|
10495 && FRAME_X_P (XFRAME (minibuf_frame)) |
|
bf33c9179a6b
(x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents:
10755
diff
changeset
|
10496 && ! EQ (frame, minibuf_frame) |
|
bf33c9179a6b
(x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents:
10755
diff
changeset
|
10497 && 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
|
10498 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
|
10499 } |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10500 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10501 /* 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
|
10502 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
|
10503 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
|
10504 FOR_EACH_FRAME (tail, frame) |
|
10921
bf33c9179a6b
(x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents:
10755
diff
changeset
|
10505 if (FRAME_X_P (XFRAME (frame)) |
|
bf33c9179a6b
(x_connection_closed): Ignore non-X frames.
Richard M. Stallman <rms@gnu.org>
parents:
10755
diff
changeset
|
10506 && 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
|
10507 { |
|
0d37c1e81c0d
(x_connection_closed): Unblock input, first thing.
Karl Heuer <kwzh@gnu.org>
parents:
11901
diff
changeset
|
10508 /* 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
|
10509 trying to find a replacement. */ |
|
0d37c1e81c0d
(x_connection_closed): Unblock input, first thing.
Karl Heuer <kwzh@gnu.org>
parents:
11901
diff
changeset
|
10510 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
|
10511 Fdelete_frame (frame, Qt); |
|
0d37c1e81c0d
(x_connection_closed): Unblock input, first thing.
Karl Heuer <kwzh@gnu.org>
parents:
11901
diff
changeset
|
10512 } |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10513 |
|
13727
9eb09adbcb38
(x_connection_closed): Don't delete dpyinfo if it's null.
Karl Heuer <kwzh@gnu.org>
parents:
13633
diff
changeset
|
10514 if (dpyinfo) |
|
9eb09adbcb38
(x_connection_closed): Don't delete dpyinfo if it's null.
Karl Heuer <kwzh@gnu.org>
parents:
13633
diff
changeset
|
10515 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
|
10516 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10517 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
|
10518 { |
|
15515
69257ac25af4
(x_connection_closed): Add newline when printing error message on stderr.
Richard M. Stallman <rms@gnu.org>
parents:
15514
diff
changeset
|
10519 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
|
10520 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
|
10521 exit (70); |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10522 } |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10523 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10524 /* 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
|
10525 #ifdef SIGIO |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10526 sigunblock (sigmask (SIGIO)); |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10527 #endif |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10528 sigunblock (sigmask (SIGALRM)); |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10529 TOTALLY_UNBLOCK_INPUT; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10530 |
|
15526
926ef4afc174
(x_connection_closed): Call clear_waiting_for_input.
Richard M. Stallman <rms@gnu.org>
parents:
15521
diff
changeset
|
10531 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
|
10532 error ("%s", error_message); |
| 621 | 10533 } |
| 10534 | |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10535 /* 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
|
10536 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
|
10537 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
|
10538 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10539 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
|
10540 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
|
10541 Display *display; |
|
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
10542 XErrorEvent *error; |
|
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
10543 { |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10544 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
|
10545 |
|
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
10546 /* 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
|
10547 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
|
10548 |
|
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
10549 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
|
10550 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
|
10551 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
|
10552 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
|
10553 } |
|
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
10554 |
|
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10555 /* 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
|
10556 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
|
10557 |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10558 static int |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10559 x_error_handler (display, error) |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10560 Display *display; |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10561 XErrorEvent *error; |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10562 { |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10563 if (! NILP (x_error_message_string)) |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10564 x_error_catcher (display, error); |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10565 else |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10566 x_error_quitter (display, error); |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10567 return 0; |
|
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10568 } |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
10569 |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10570 /* 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
|
10571 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
|
10572 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
|
10573 |
|
1875
f569bc4e9b8f
* xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents:
1841
diff
changeset
|
10574 static int |
|
f569bc4e9b8f
* xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents:
1841
diff
changeset
|
10575 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
|
10576 Display *display; |
|
f569bc4e9b8f
* xterm.c (x_set_window_size): Call change_frame_size instead of
Jim Blandy <jimb@redhat.com>
parents:
1841
diff
changeset
|
10577 { |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10578 char buf[256]; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10579 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10580 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
|
10581 x_connection_closed (display, buf); |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10582 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
|
10583 } |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
10584 |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
10585 /* 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
|
10586 |
|
8291
9c6ddd14996b
(struct font_info): New field full_name.
Richard M. Stallman <rms@gnu.org>
parents:
8279
diff
changeset
|
10587 /* 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
|
10588 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
|
10589 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
|
10590 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
|
10591 |
|
3076
e3b3c67cf203
Arrange for font names to get fully resolved - no wildcards.
Jim Blandy <jimb@redhat.com>
parents:
3066
diff
changeset
|
10592 Lisp_Object |
| 771 | 10593 x_new_font (f, fontname) |
| 10594 struct frame *f; | |
| 286 | 10595 register char *fontname; |
| 10596 { | |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10597 struct font_info *fontp |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10598 = fs_load_font (f, FRAME_X_FONT_TABLE (f), CHARSET_ASCII, fontname, -1); |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10599 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10600 if (!fontp) |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10601 return Qnil; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10602 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10603 f->output_data.x->font = (XFontStruct *) (fontp->font); |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10604 f->output_data.x->font_baseline |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10605 = (f->output_data.x->font->ascent + fontp->baseline_offset); |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10606 f->output_data.x->fontset = -1; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10607 |
|
9167
8ad448b29c1c
(x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents:
9101
diff
changeset
|
10608 /* 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
|
10609 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
|
10610 { |
|
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
10611 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
|
10612 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
|
10613 } |
|
8ad448b29c1c
(x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents:
9101
diff
changeset
|
10614 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
|
10615 { |
|
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
|
10616 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
|
10617 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
|
10618 } |
|
9167
8ad448b29c1c
(x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents:
9101
diff
changeset
|
10619 |
| 771 | 10620 /* 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
|
10621 if (FRAME_X_WINDOW (f) != 0) |
| 286 | 10622 { |
|
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
10623 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
|
10624 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
|
10625 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
|
10626 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
|
10627 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
|
10628 f->output_data.x->font->fid); |
| 771 | 10629 |
|
6767
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
10630 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
|
10631 x_set_window_size (f, 0, f->width, f->height); |
| 286 | 10632 } |
|
6767
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
10633 else |
|
8fbcee1c2059
(stufflines, scraplines, dumprectangle, x_do_pending_expose)
Richard M. Stallman <rms@gnu.org>
parents:
6757
diff
changeset
|
10634 /* 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
|
10635 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
|
10636 f->output_data.x->line_height = FONT_HEIGHT (f->output_data.x->font); |
| 286 | 10637 |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10638 return build_string (fontp->full_name); |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10639 } |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10640 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10641 /* 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
|
10642 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
|
10643 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
|
10644 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
|
10645 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10646 Lisp_Object |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10647 x_new_fontset (f, fontsetname) |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10648 struct frame *f; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10649 char *fontsetname; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10650 { |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10651 int fontset = fs_query_fontset (f, fontsetname); |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10652 struct fontset_info *fontsetp; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10653 Lisp_Object result; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10654 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10655 if (fontset < 0) |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10656 return Qnil; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10657 |
|
18347
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
10658 if (f->output_data.x->fontset == fontset) |
|
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
10659 /* 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
|
10660 to do. */ |
|
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
10661 return build_string (fontsetname); |
|
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
10662 |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10663 fontsetp = FRAME_FONTSET_DATA (f)->fontset_table[fontset]; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10664 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10665 if (!fontsetp->fontname[CHARSET_ASCII]) |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10666 /* This fontset doesn't contain ASCII font. */ |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10667 return Qnil; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10668 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10669 result = x_new_font (f, fontsetp->fontname[CHARSET_ASCII]); |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10670 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10671 if (!STRINGP (result)) |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10672 /* Can't load ASCII font. */ |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10673 return Qnil; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10674 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10675 /* 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
|
10676 f->output_data.x->fontset = fontset; |
|
18347
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
10677 FS_LOAD_FONT (f, FRAME_X_FONT_TABLE (f), |
|
24223
c7888c86b9e1
(x_new_fontset): For ASCII font, don't use the font name
Kenichi Handa <handa@m17n.org>
parents:
24164
diff
changeset
|
10678 CHARSET_ASCII, fontsetp->fontname[CHARSET_ASCII], fontset); |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10679 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
10680 return build_string (fontsetname); |
| 286 | 10681 } |
| 10682 | |
|
14826
eec0abb31126
Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents:
14801
diff
changeset
|
10683 /* Calculate the absolute position in frame F |
|
eec0abb31126
Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents:
14801
diff
changeset
|
10684 from its current recorded position values and gravity. */ |
|
eec0abb31126
Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents:
14801
diff
changeset
|
10685 |
| 21514 | 10686 void |
|
7264
a701bffa0f9d
(x_calc_absolute_position): Use size_hint_flags.
Richard M. Stallman <rms@gnu.org>
parents:
7262
diff
changeset
|
10687 x_calc_absolute_position (f) |
| 771 | 10688 struct frame *f; |
| 286 | 10689 { |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10690 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
|
10691 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
|
10692 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
|
10693 int this_window; |
|
507a45c7e911
(x_calc_absolute_position): Use menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11807
diff
changeset
|
10694 |
|
17953
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10695 /* 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
|
10696 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
|
10697 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
|
10698 return; |
|
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10699 |
|
11896
507a45c7e911
(x_calc_absolute_position): Use menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11807
diff
changeset
|
10700 #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
|
10701 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
|
10702 #else |
|
507a45c7e911
(x_calc_absolute_position): Use menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11807
diff
changeset
|
10703 this_window = FRAME_X_WINDOW (f); |
|
507a45c7e911
(x_calc_absolute_position): Use menubar_height field.
Karl Heuer <kwzh@gnu.org>
parents:
11807
diff
changeset
|
10704 #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
|
10705 |
|
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
10706 /* 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
|
10707 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
|
10708 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
|
10709 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
|
10710 { |
|
17953
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10711 int count; |
|
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10712 |
|
4630
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
10713 BLOCK_INPUT; |
|
17953
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10714 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
|
10715 while (1) |
|
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10716 { |
|
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10717 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
|
10718 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
|
10719 |
|
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10720 /* 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
|
10721 this_window, |
|
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10722 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
|
10723 |
|
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10724 /* 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
|
10725 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
|
10726 |
|
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10727 /* Child of win. */ |
|
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10728 &child); |
|
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10729 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
|
10730 { |
|
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10731 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
|
10732 Window *newchildren; |
|
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10733 int nchildren; |
|
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10734 |
|
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10735 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
|
10736 &newparent, &newchildren, &nchildren)) |
|
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10737 break; |
|
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10738 |
|
23107
44eda932afcf
(x_calc_absolute_position): Cast argument to XFree, in
Karl Heuer <kwzh@gnu.org>
parents:
23095
diff
changeset
|
10739 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
|
10740 |
|
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10741 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
|
10742 } |
|
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10743 else |
|
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10744 break; |
|
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10745 } |
|
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10746 |
|
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
10747 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
|
10748 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
|
10749 } |
|
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
10750 |
|
70247ce8b381
(x_wm_set_size_hint): New args spec_x and spec_y.
Richard M. Stallman <rms@gnu.org>
parents:
4493
diff
changeset
|
10751 /* 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
|
10752 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
|
10753 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
|
10754 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
|
10755 - 2 * f->output_data.x->border_width - win_x |
|
eec0abb31126
Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents:
14801
diff
changeset
|
10756 - PIXEL_WIDTH (f) |
|
eec0abb31126
Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents:
14801
diff
changeset
|
10757 + f->output_data.x->left_pos); |
| 771 | 10758 |
|
7262
68fc80bf10df
(x_wm_set_size_hint): Don't try to handle negative positions.
Richard M. Stallman <rms@gnu.org>
parents:
7210
diff
changeset
|
10759 if (flags & YNegative) |
|
24991
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 int menubar_height = 0; |
|
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 #ifdef USE_X_TOOLKIT |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10764 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
|
10765 menubar_height |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10766 = (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
|
10767 + 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
|
10768 #endif |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10769 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10770 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
|
10771 - 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
|
10772 - win_y |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10773 - PIXEL_HEIGHT (f) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10774 - menubar_height |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10775 + f->output_data.x->top_pos); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10776 } |
|
14826
eec0abb31126
Comment/whitespace change.
Richard M. Stallman <rms@gnu.org>
parents:
14801
diff
changeset
|
10777 |
|
7409
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
10778 /* 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
|
10779 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
|
10780 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
|
10781 f->output_data.x->size_hint_flags &= ~ (XNegative | YNegative); |
| 286 | 10782 } |
| 10783 | |
|
7409
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
10784 /* 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
|
10785 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
|
10786 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
|
10787 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
|
10788 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
|
10789 |
| 21514 | 10790 void |
|
6934
e0ab4f59004e
(dumpglyphs): When HL=2, check explicitly for using
Richard M. Stallman <rms@gnu.org>
parents:
6883
diff
changeset
|
10791 x_set_offset (f, xoff, yoff, change_gravity) |
| 771 | 10792 struct frame *f; |
| 286 | 10793 register int xoff, yoff; |
|
6934
e0ab4f59004e
(dumpglyphs): When HL=2, check explicitly for using
Richard M. Stallman <rms@gnu.org>
parents:
6883
diff
changeset
|
10794 int change_gravity; |
| 286 | 10795 { |
|
11901
8ecc60a02138
(x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents:
11896
diff
changeset
|
10796 int modified_top, modified_left; |
|
8ecc60a02138
(x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents:
11896
diff
changeset
|
10797 |
|
11988
a1ce6f699967
(x_set_offset): Distinguish CHANGE_GRAVITY < 0 case.
Karl Heuer <kwzh@gnu.org>
parents:
11953
diff
changeset
|
10798 if (change_gravity > 0) |
|
7409
fe56a02838ba
(x_set_offset): Set gravity and size hint
Richard M. Stallman <rms@gnu.org>
parents:
7346
diff
changeset
|
10799 { |
|
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
10800 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
|
10801 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
|
10802 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
|
10803 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
|
10804 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
|
10805 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
|
10806 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
|
10807 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
|
10808 } |
|
7264
a701bffa0f9d
(x_calc_absolute_position): Use size_hint_flags.
Richard M. Stallman <rms@gnu.org>
parents:
7262
diff
changeset
|
10809 x_calc_absolute_position (f); |
| 286 | 10810 |
| 10811 BLOCK_INPUT; | |
|
11915
e2ab839155e1
(XTflash): Use pointers as args to select.
Karl Heuer <kwzh@gnu.org>
parents:
11904
diff
changeset
|
10812 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
|
10813 |
|
17519
5aa7011aa3d5
(x_set_offset): Turn off the code that added the border_width
Richard M. Stallman <rms@gnu.org>
parents:
17371
diff
changeset
|
10814 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
|
10815 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
|
10816 #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
|
10817 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
|
10818 /* 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
|
10819 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
|
10820 if (change_gravity != 0) |
|
11901
8ecc60a02138
(x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents:
11896
diff
changeset
|
10821 { |
|
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
10822 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
|
10823 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
|
10824 } |
|
17519
5aa7011aa3d5
(x_set_offset): Turn off the code that added the border_width
Richard M. Stallman <rms@gnu.org>
parents:
17371
diff
changeset
|
10825 #endif |
|
11901
8ecc60a02138
(x_set_offset): Add border_width when calling XMoveWindow.
Karl Heuer <kwzh@gnu.org>
parents:
11896
diff
changeset
|
10826 |
|
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
10827 #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
|
10828 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
|
10829 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
|
10830 #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
|
10831 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
|
10832 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
|
10833 #endif /* not USE_X_TOOLKIT */ |
| 286 | 10834 UNBLOCK_INPUT; |
| 10835 } | |
| 10836 | |
|
5825
b1f35db748d8
(x_make_frame_invisible): Add USE_X_TOOLKIT conditional.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5753
diff
changeset
|
10837 /* 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
|
10838 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
|
10839 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
|
10840 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
|
10841 |
| 21514 | 10842 void |
|
5825
b1f35db748d8
(x_make_frame_invisible): Add USE_X_TOOLKIT conditional.
Fred Pierresteguy <F.Pierresteguy@frcl.bull.fr>
parents:
5753
diff
changeset
|
10843 x_set_window_size (f, change_gravity, cols, rows) |
| 771 | 10844 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
|
10845 int change_gravity; |
|
976
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
10846 int cols, rows; |
| 286 | 10847 { |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10848 #ifndef USE_X_TOOLKIT |
| 286 | 10849 int pixelwidth, pixelheight; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
10850 #endif |
|
14692
e93656946a8c
(x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents:
14557
diff
changeset
|
10851 |
|
e93656946a8c
(x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents:
14557
diff
changeset
|
10852 BLOCK_INPUT; |
| 286 | 10853 |
|
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
|
10854 #ifdef USE_X_TOOLKIT |
|
7415
fbea5637a4b4
(x_set_window_size) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents:
7409
diff
changeset
|
10855 { |
|
fbea5637a4b4
(x_set_window_size) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents:
7409
diff
changeset
|
10856 /* 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
|
10857 call to XtSetValues within EmacsFrameSetCharSize. |
|
fbea5637a4b4
(x_set_window_size) [USE_X_TOOLKIT]:
Richard M. Stallman <rms@gnu.org>
parents:
7409
diff
changeset
|
10858 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
|
10859 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
|
10860 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
|
10861 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
|
10862 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
|
10863 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
|
10864 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
|
10865 } |
|
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
|
10866 |
|
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
|
10867 #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
|
10868 |
|
976
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
10869 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
|
10870 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
|
10871 = (!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
|
10872 ? 0 |
|
8ad448b29c1c
(x_new_font): New rule for computing column width. Factored out common code.
Karl Heuer <kwzh@gnu.org>
parents:
9101
diff
changeset
|
10873 : 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
|
10874 ? 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
|
10875 : (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
|
10876 f->output_data.x->flags_areas_extra |
| 25465 | 10877 = 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
|
10878 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
|
10879 pixelheight = CHAR_TO_PIXEL_HEIGHT (f, rows); |
| 286 | 10880 |
|
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
10881 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
|
10882 x_wm_set_size_hint (f, (long) 0, 0); |
|
8781
98741404d3e0
Delete X11 conditionals.
Richard M. Stallman <rms@gnu.org>
parents:
8724
diff
changeset
|
10883 |
|
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
10884 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
|
10885 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
|
10886 pixelwidth, pixelheight); |
|
976
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
10887 |
|
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
10888 /* 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
|
10889 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
|
10890 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
|
10891 ConfigureNotify event gets here. |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
10892 |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
10893 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
|
10894 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
|
10895 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
|
10896 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
|
10897 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
|
10898 |
|
1c02364724aa
(x_set_window_size): When calling change_frame_size, specify 1 for DELAY.
Richard M. Stallman <rms@gnu.org>
parents:
25101
diff
changeset
|
10899 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
|
10900 a BLOCK_INPUT. */ |
|
25360
2f3ad0a21be5
Call change_frame_size and do_pending_window_change with
Gerd Moellmann <gerd@gnu.org>
parents:
25328
diff
changeset
|
10901 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
|
10902 PIXEL_WIDTH (f) = pixelwidth; |
|
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
10903 PIXEL_HEIGHT (f) = pixelheight; |
|
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
10904 |
|
14692
e93656946a8c
(x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents:
14557
diff
changeset
|
10905 /* 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
|
10906 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
|
10907 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
|
10908 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
|
10909 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
|
10910 |
|
e93656946a8c
(x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents:
14557
diff
changeset
|
10911 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
|
10912 |
|
e93656946a8c
(x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents:
14557
diff
changeset
|
10913 #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
|
10914 |
|
7651
1569a13efdcd
(x_set_window_size): If cursor outside new size, mark it off.
Richard M. Stallman <rms@gnu.org>
parents:
7602
diff
changeset
|
10915 /* 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
|
10916 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
|
10917 |
|
14692
e93656946a8c
(x_set_window_size): Clear out the mouse-highlighting data
Richard M. Stallman <rms@gnu.org>
parents:
14557
diff
changeset
|
10918 /* 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
|
10919 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
|
10920 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
|
10921 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
|
10922 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
|
10923 |
| 286 | 10924 UNBLOCK_INPUT; |
| 10925 } | |
| 10926 | |
|
12172
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
10927 /* Mouse warping. */ |
| 286 | 10928 |
|
7026
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
10929 void |
| 771 | 10930 x_set_mouse_position (f, x, y) |
| 10931 struct frame *f; | |
| 286 | 10932 int x, y; |
| 10933 { | |
| 10934 int pix_x, pix_y; | |
| 10935 | |
|
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
10936 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
|
10937 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
|
10938 |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
10939 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
|
10940 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
|
10941 |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
10942 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
|
10943 if (pix_y > PIXEL_HEIGHT (f)) pix_y = PIXEL_HEIGHT (f); |
| 286 | 10944 |
| 10945 BLOCK_INPUT; | |
| 10946 | |
|
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
10947 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
|
10948 0, 0, 0, 0, pix_x, pix_y); |
| 286 | 10949 UNBLOCK_INPUT; |
| 10950 } | |
| 10951 | |
|
7026
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
10952 /* 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
|
10953 |
|
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
10954 void |
|
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
10955 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
|
10956 struct frame *f; |
|
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
10957 int pix_x, pix_y; |
|
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
10958 { |
|
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
10959 BLOCK_INPUT; |
|
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
10960 |
|
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
10961 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
|
10962 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
|
10963 UNBLOCK_INPUT; |
|
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
10964 } |
|
12172
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
10965 |
|
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
10966 /* focus shifting, raising and lowering. */ |
|
7026
55f9a506180d
(x_set_mouse_pixel_position): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7001
diff
changeset
|
10967 |
| 21514 | 10968 void |
| 771 | 10969 x_focus_on_frame (f) |
| 10970 struct frame *f; | |
| 286 | 10971 { |
|
5156
fd78458b8c43
(XTread_socket): Really handle Xatom_wm_window_moved events.
Richard M. Stallman <rms@gnu.org>
parents:
5018
diff
changeset
|
10972 #if 0 /* This proves to be unpleasant. */ |
| 771 | 10973 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
|
10974 #endif |
| 369 | 10975 #if 0 |
| 10976 /* I don't think that the ICCCM allows programs to do things like this | |
| 10977 without the interaction of the window manager. Whatever you end up | |
| 771 | 10978 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
|
10979 XSetInputFocus (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f), |
| 286 | 10980 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
|
10981 #endif /* ! 0 */ |
| 286 | 10982 } |
| 10983 | |
| 21514 | 10984 void |
| 771 | 10985 x_unfocus_frame (f) |
| 10986 struct frame *f; | |
| 286 | 10987 { |
| 369 | 10988 #if 0 |
| 771 | 10989 /* 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
|
10990 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
|
10991 XSetInputFocus (FRAME_X_DISPLAY (f), PointerRoot, |
| 286 | 10992 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
|
10993 #endif /* ! 0 */ |
| 286 | 10994 } |
| 10995 | |
| 771 | 10996 /* Raise frame F. */ |
| 10997 | |
| 21514 | 10998 void |
| 771 | 10999 x_raise_frame (f) |
| 11000 struct frame *f; | |
| 286 | 11001 { |
|
1658
452ba03935d7
* xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents:
1530
diff
changeset
|
11002 if (f->async_visible) |
| 286 | 11003 { |
| 11004 BLOCK_INPUT; | |
|
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11005 #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
|
11006 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
|
11007 #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
|
11008 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
|
11009 #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
|
11010 XFlush (FRAME_X_DISPLAY (f)); |
| 286 | 11011 UNBLOCK_INPUT; |
| 11012 } | |
| 11013 } | |
| 11014 | |
| 771 | 11015 /* Lower frame F. */ |
| 11016 | |
| 21514 | 11017 void |
| 771 | 11018 x_lower_frame (f) |
| 11019 struct frame *f; | |
| 286 | 11020 { |
|
1658
452ba03935d7
* xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents:
1530
diff
changeset
|
11021 if (f->async_visible) |
| 286 | 11022 { |
| 11023 BLOCK_INPUT; | |
|
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11024 #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
|
11025 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
|
11026 #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
|
11027 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
|
11028 #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
|
11029 XFlush (FRAME_X_DISPLAY (f)); |
| 286 | 11030 UNBLOCK_INPUT; |
| 11031 } | |
| 11032 } | |
| 11033 | |
|
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11034 static void |
|
14411
bac274f178b0
(XTframe_raise_lower): Rename arg `raise' to `raise_flag'.
Richard M. Stallman <rms@gnu.org>
parents:
14305
diff
changeset
|
11035 XTframe_raise_lower (f, raise_flag) |
|
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11036 FRAME_PTR f; |
|
14411
bac274f178b0
(XTframe_raise_lower): Rename arg `raise' to `raise_flag'.
Richard M. Stallman <rms@gnu.org>
parents:
14305
diff
changeset
|
11037 int raise_flag; |
|
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11038 { |
|
14411
bac274f178b0
(XTframe_raise_lower): Rename arg `raise' to `raise_flag'.
Richard M. Stallman <rms@gnu.org>
parents:
14305
diff
changeset
|
11039 if (raise_flag) |
|
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11040 x_raise_frame (f); |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11041 else |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11042 x_lower_frame (f); |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11043 } |
|
12172
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
11044 |
|
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
11045 /* Change of visibility. */ |
| 286 | 11046 |
|
12192
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
11047 /* 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
|
11048 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
|
11049 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
|
11050 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
|
11051 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
|
11052 finishes with it. */ |
|
1b571a7992b0
(x_make_frame_visible): Test and set asked_for_visible.
Karl Heuer <kwzh@gnu.org>
parents:
12189
diff
changeset
|
11053 |
| 21514 | 11054 void |
| 771 | 11055 x_make_frame_visible (f) |
| 11056 struct frame *f; | |
| 286 | 11057 { |
|
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
11058 Lisp_Object type; |
|
17963
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11059 int original_top, original_left; |
| 286 | 11060 |
| 429 | 11061 BLOCK_INPUT; |
| 11062 | |
|
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
11063 type = x_icon_type (f); |
|
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
11064 if (!NILP (type)) |
|
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
11065 x_bitmap_icon (f, type); |
|
9446
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
11066 |
| 771 | 11067 if (! FRAME_VISIBLE_P (f)) |
| 286 | 11068 { |
|
17963
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11069 /* 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
|
11070 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
|
11071 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
|
11072 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
|
11073 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
|
11074 && ! 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
|
11075 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
|
11076 |
|
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11077 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
|
11078 |
| 429 | 11079 if (! EQ (Vx_no_window_manager, Qt)) |
| 771 | 11080 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
|
11081 #ifdef USE_X_TOOLKIT |
|
7167
2fa74c48e4e5
(x_make_frame_visible): Use XtMapWidget, not XtPopup.
Richard M. Stallman <rms@gnu.org>
parents:
7128
diff
changeset
|
11082 /* 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
|
11083 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
|
11084 #else /* not USE_X_TOOLKIT */ |
|
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
11085 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
|
11086 #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
|
11087 #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
|
11088 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
|
11089 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
|
11090 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
|
11091 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
|
11092 #endif |
| 429 | 11093 } |
| 286 | 11094 |
|
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11095 XFlush (FRAME_X_DISPLAY (f)); |
| 429 | 11096 |
|
7959
224440646fa7
(make_frame_visible): At end, wait till Emacs sees frame is visible.
Richard M. Stallman <rms@gnu.org>
parents:
7935
diff
changeset
|
11097 /* 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
|
11098 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
|
11099 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
|
11100 { |
|
224440646fa7
(make_frame_visible): At end, wait till Emacs sees frame is visible.
Richard M. Stallman <rms@gnu.org>
parents:
7935
diff
changeset
|
11101 Lisp_Object frame; |
|
9337
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
11102 int count = input_signal_count; |
|
18528
73f4d9258f04
(x_make_frame_visible): Check has_been_visible
Richard M. Stallman <rms@gnu.org>
parents:
18347
diff
changeset
|
11103 /* 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
|
11104 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
|
11105 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
|
11106 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
|
11107 |
|
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11108 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
|
11109 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
|
11110 |
|
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
11111 /* This must come after we set COUNT. */ |
|
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
11112 UNBLOCK_INPUT; |
|
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
11113 |
|
22907
43e290c6fb19
(x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents:
22773
diff
changeset
|
11114 /* 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
|
11115 |
|
18008
d25d2472df51
(XTread_socket) <ConfigureNotify>: Don't call
Richard M. Stallman <rms@gnu.org>
parents:
17963
diff
changeset
|
11116 /* 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
|
11117 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
|
11118 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
|
11119 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
|
11120 |
|
73f4d9258f04
(x_make_frame_visible): Check has_been_visible
Richard M. Stallman <rms@gnu.org>
parents:
18347
diff
changeset
|
11121 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
|
11122 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
|
11123 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
|
11124 |
|
18630
3e414b9da546
(x_make_frame_visible): Don't move the frame
Richard M. Stallman <rms@gnu.org>
parents:
18528
diff
changeset
|
11125 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
|
11126 && 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
|
11127 && previously_visible) |
|
17963
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11128 { |
|
22907
43e290c6fb19
(x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents:
22773
diff
changeset
|
11129 Drawable rootw; |
|
43e290c6fb19
(x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents:
22773
diff
changeset
|
11130 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
|
11131 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
|
11132 |
|
17963
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11133 BLOCK_INPUT; |
|
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11134 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11135 /* 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
|
11136 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
|
11137 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
|
11138 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
|
11139 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
|
11140 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
|
11141 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
|
11142 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
|
11143 &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
|
11144 |
|
43e290c6fb19
(x_list_fonts): Call XFreeFont after the new call to XLoadQueryFont.
Richard M. Stallman <rms@gnu.org>
parents:
22773
diff
changeset
|
11145 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
|
11146 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
|
11147 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
|
11148 |
|
17963
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11149 UNBLOCK_INPUT; |
|
b77c13e71ba3
(XTread_socket) <UnmapNotify>: Don't make an inconify_event
Richard M. Stallman <rms@gnu.org>
parents:
17953
diff
changeset
|
11150 } |
|
17953
96a51be54a7e
(x_make_frame_visible): Call x_set_offset only after
Richard M. Stallman <rms@gnu.org>
parents:
17877
diff
changeset
|
11151 |
|
9338
873508897cc2
(x_new_focus_frame, construct_mouse_click, construct_menu_click,
Karl Heuer <kwzh@gnu.org>
parents:
9337
diff
changeset
|
11152 XSETFRAME (frame, f); |
|
9337
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
11153 |
|
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
11154 while (1) |
|
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
|
11155 { |
|
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11156 x_sync (f); |
|
9337
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
11157 /* Once we have handled input events, |
|
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
11158 we should have received the MapNotify if one is coming. |
|
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
11159 So if we have not got it yet, stop looping. |
|
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
11160 Some window managers make their own decisions |
|
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
11161 about visibility. */ |
|
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
11162 if (input_signal_count != count) |
|
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
11163 break; |
|
8609
145a583d9128
(x_make_frame_visible): Raise a signal to cause the pending X I/O to be read.
Karl Heuer <kwzh@gnu.org>
parents:
8567
diff
changeset
|
11164 /* Machines that do polling rather than SIGIO have been observed |
|
8634
187df0aff719
(x_make_frame_visible): Call signal handler directly.
Karl Heuer <kwzh@gnu.org>
parents:
8609
diff
changeset
|
11165 to go into a busy-wait here. So we'll fake an alarm signal |
|
187df0aff719
(x_make_frame_visible): Call signal handler directly.
Karl Heuer <kwzh@gnu.org>
parents:
8609
diff
changeset
|
11166 to let the handler know that there's something to be read. |
|
187df0aff719
(x_make_frame_visible): Call signal handler directly.
Karl Heuer <kwzh@gnu.org>
parents:
8609
diff
changeset
|
11167 We used to raise a real alarm, but it seems that the handler |
|
187df0aff719
(x_make_frame_visible): Call signal handler directly.
Karl Heuer <kwzh@gnu.org>
parents:
8609
diff
changeset
|
11168 isn't always enabled here. This is probably a bug. */ |
|
8682
42f95b1368ea
(x_make_frame_visible): Call input_polling_used.
Richard M. Stallman <rms@gnu.org>
parents:
8652
diff
changeset
|
11169 if (input_polling_used ()) |
| 8652 | 11170 { |
| 11171 /* It could be confusing if a real alarm arrives while processing | |
| 11172 the fake one. Turn it off and let the handler reset it. */ | |
| 11173 alarm (0); | |
|
20364
8e58003a8d02
(x_make_frame_visible): Give dummy arg to
Kenichi Handa <handa@m17n.org>
parents:
20182
diff
changeset
|
11174 input_poll_signal (0); |
| 8652 | 11175 } |
|
9337
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
11176 /* Once we have handled input events, |
|
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
11177 we should have received the MapNotify if one is coming. |
|
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
11178 So if we have not got it yet, stop looping. |
|
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
11179 Some window managers make their own decisions |
|
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
11180 about visibility. */ |
|
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
11181 if (input_signal_count != count) |
|
7b933936a676
(input_signal_count): New variable.
Richard M. Stallman <rms@gnu.org>
parents:
9232
diff
changeset
|
11182 break; |
|
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
|
11183 } |
|
7959
224440646fa7
(make_frame_visible): At end, wait till Emacs sees frame is visible.
Richard M. Stallman <rms@gnu.org>
parents:
7935
diff
changeset
|
11184 FRAME_SAMPLE_VISIBILITY (f); |
|
224440646fa7
(make_frame_visible): At end, wait till Emacs sees frame is visible.
Richard M. Stallman <rms@gnu.org>
parents:
7935
diff
changeset
|
11185 } |
| 286 | 11186 } |
| 11187 | |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11188 /* Change from mapped state to withdrawn state. */ |
| 286 | 11189 |
|
12172
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
11190 /* Make the frame visible (mapped and not iconified). */ |
|
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
11191 |
| 21514 | 11192 void |
| 771 | 11193 x_make_frame_invisible (f) |
| 11194 struct frame *f; | |
| 286 | 11195 { |
|
7602
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11196 Window window; |
|
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11197 |
|
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11198 #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
|
11199 /* 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
|
11200 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
|
11201 #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
|
11202 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
|
11203 #endif /* not USE_X_TOOLKIT */ |
| 286 | 11204 |
|
3284
a47979ffad1e
(XTread_socket): For UnmapNotify, if frame was visible,
Richard M. Stallman <rms@gnu.org>
parents:
3282
diff
changeset
|
11205 /* 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
|
11206 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
|
11207 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
|
11208 |
|
6983
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
11209 #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
|
11210 if (! f->async_visible && ! f->async_iconified) |
| 286 | 11211 return; |
|
6983
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
11212 #endif |
| 286 | 11213 |
| 11214 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
|
11215 |
|
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11216 /* 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
|
11217 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
|
11218 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
|
11219 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
|
11220 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
|
11221 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
|
11222 |
|
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
11223 #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
|
11224 |
|
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11225 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
|
11226 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
|
11227 { |
|
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
11228 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
|
11229 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
|
11230 } |
|
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
11231 #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
|
11232 |
|
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
11233 /* Tell the window manager what we're going to do. */ |
| 286 | 11234 if (! EQ (Vx_no_window_manager, Qt)) |
| 11235 { | |
|
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11236 XEvent unmap; |
|
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11237 |
|
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11238 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
|
11239 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
|
11240 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
|
11241 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
|
11242 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
|
11243 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
|
11244 False, |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11245 SubstructureRedirectMaskSubstructureNotifyMask, |
|
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11246 &unmap)) |
|
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11247 { |
|
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11248 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
|
11249 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
|
11250 } |
| 286 | 11251 } |
| 11252 | |
|
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11253 /* 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
|
11254 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
|
11255 #endif /* ! defined (HAVE_X11R4) */ |
| 286 | 11256 |
|
6983
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
11257 /* 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
|
11258 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
|
11259 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
|
11260 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
|
11261 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
|
11262 f->visible = 0; |
|
b18e5c09d7c3
(XTread_socket, case ClientMessage): Use x_window_to_frame unconditionally.
Richard M. Stallman <rms@gnu.org>
parents:
6941
diff
changeset
|
11263 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
|
11264 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
|
11265 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
|
11266 |
|
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11267 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
|
11268 |
| 286 | 11269 UNBLOCK_INPUT; |
| 11270 } | |
| 11271 | |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11272 /* Change window state from mapped to iconified. */ |
| 286 | 11273 |
| 21514 | 11274 void |
| 771 | 11275 x_iconify_frame (f) |
| 11276 struct frame *f; | |
| 286 | 11277 { |
|
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11278 int result; |
|
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
11279 Lisp_Object type; |
| 286 | 11280 |
|
3284
a47979ffad1e
(XTread_socket): For UnmapNotify, if frame was visible,
Richard M. Stallman <rms@gnu.org>
parents:
3282
diff
changeset
|
11281 /* 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
|
11282 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
|
11283 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
|
11284 |
|
1658
452ba03935d7
* xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents:
1530
diff
changeset
|
11285 if (f->async_iconified) |
| 286 | 11286 return; |
| 11287 | |
|
9446
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
11288 BLOCK_INPUT; |
|
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
11289 |
|
13627
8873aa3451dd
(XTmouse_position): Exit the loop if child == win.
Richard M. Stallman <rms@gnu.org>
parents:
13598
diff
changeset
|
11290 FRAME_SAMPLE_VISIBILITY (f); |
|
8873aa3451dd
(XTmouse_position): Exit the loop if child == win.
Richard M. Stallman <rms@gnu.org>
parents:
13598
diff
changeset
|
11291 |
|
9565
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
11292 type = x_icon_type (f); |
|
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
11293 if (!NILP (type)) |
|
255d98c7cd67
(dumpglyphs): Explicitly draw background stipple.
Richard M. Stallman <rms@gnu.org>
parents:
9542
diff
changeset
|
11294 x_bitmap_icon (f, type); |
|
9446
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
11295 |
|
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11296 #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
|
11297 |
|
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11298 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
|
11299 { |
|
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11300 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
|
11301 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
|
11302 /* 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
|
11303 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
|
11304 /* 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
|
11305 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
|
11306 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
|
11307 f->iconified = 1; |
|
16753
ab63a77c3a23
(x_iconify_frame): Clear visible when we set iconified.
Richard M. Stallman <rms@gnu.org>
parents:
16491
diff
changeset
|
11308 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
|
11309 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
|
11310 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
|
11311 UNBLOCK_INPUT; |
|
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11312 return; |
|
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11313 } |
|
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11314 |
|
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11315 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
|
11316 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
|
11317 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
|
11318 UNBLOCK_INPUT; |
|
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11319 |
|
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11320 if (!result) |
|
7602
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11321 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
|
11322 |
|
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11323 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
|
11324 f->async_visible = 0; |
|
ab63a77c3a23
(x_iconify_frame): Clear visible when we set iconified.
Richard M. Stallman <rms@gnu.org>
parents:
16491
diff
changeset
|
11325 |
|
5740
48da4ed089e9
(x_iconify_frame): Fix misbalanced BLOCK_INPUT/UNBLOCK_INPUT.
Karl Heuer <kwzh@gnu.org>
parents:
5737
diff
changeset
|
11326 |
|
48da4ed089e9
(x_iconify_frame): Fix misbalanced BLOCK_INPUT/UNBLOCK_INPUT.
Karl Heuer <kwzh@gnu.org>
parents:
5737
diff
changeset
|
11327 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
|
11328 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
|
11329 UNBLOCK_INPUT; |
|
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11330 #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
|
11331 |
|
7738
a810335742bb
(x_iconify_frame): Call x_set_offset,
Richard M. Stallman <rms@gnu.org>
parents:
7706
diff
changeset
|
11332 /* 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
|
11333 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
|
11334 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
|
11335 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
|
11336 |
|
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11337 /* 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
|
11338 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
|
11339 |
|
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11340 /* 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
|
11341 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
|
11342 { |
|
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11343 XEvent message; |
|
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
11344 |
|
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
11345 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
|
11346 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
|
11347 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
|
11348 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
|
11349 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
|
11350 |
|
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11351 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
|
11352 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
|
11353 False, |
|
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11354 SubstructureRedirectMask | SubstructureNotifyMask, |
|
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11355 &message)) |
| 286 | 11356 { |
| 11357 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
|
11358 error ("Can't notify window manager of iconification"); |
| 286 | 11359 } |
|
1020
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11360 } |
|
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11361 |
|
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
11362 /* 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
|
11363 IconicState. */ |
|
7c2565dd644c
* xterm.c (x_wm_hints): Variable deleted. This has to be
Jim Blandy <jimb@redhat.com>
parents:
976
diff
changeset
|
11364 x_wm_set_window_state (f, IconicState); |
| 286 | 11365 |
|
4304
b5014da888a8
(x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents:
4277
diff
changeset
|
11366 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
|
11367 { |
|
b5014da888a8
(x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents:
4277
diff
changeset
|
11368 /* 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
|
11369 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
|
11370 } |
|
b5014da888a8
(x_iconify_frame): Handle case where frame was invisible.
Richard M. Stallman <rms@gnu.org>
parents:
4277
diff
changeset
|
11371 |
|
1658
452ba03935d7
* xterm.c (XTread_socket): When we get MapNotify, UnmapNotify,
Jim Blandy <jimb@redhat.com>
parents:
1530
diff
changeset
|
11372 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
|
11373 f->async_visible = 0; |
| 286 | 11374 |
|
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11375 XFlush (FRAME_X_DISPLAY (f)); |
| 286 | 11376 UNBLOCK_INPUT; |
|
5740
48da4ed089e9
(x_iconify_frame): Fix misbalanced BLOCK_INPUT/UNBLOCK_INPUT.
Karl Heuer <kwzh@gnu.org>
parents:
5737
diff
changeset
|
11377 #endif /* not USE_X_TOOLKIT */ |
| 286 | 11378 } |
|
12172
58ce63f11008
(x_get_keysym_name): New function.
Karl Heuer <kwzh@gnu.org>
parents:
12079
diff
changeset
|
11379 |
|
1810
bf618128d973
* xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents:
1803
diff
changeset
|
11380 /* 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
|
11381 |
| 21514 | 11382 void |
|
1810
bf618128d973
* xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents:
1803
diff
changeset
|
11383 x_destroy_window (f) |
| 771 | 11384 struct frame *f; |
| 286 | 11385 { |
|
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
11386 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
|
11387 |
| 286 | 11388 BLOCK_INPUT; |
|
1810
bf618128d973
* xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents:
1803
diff
changeset
|
11389 |
|
14489
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
11390 /* 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
|
11391 commands to the X server. */ |
|
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
11392 if (dpyinfo->display != 0) |
|
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
11393 { |
|
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
11394 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
|
11395 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
|
11396 #ifdef HAVE_X_I18N |
|
34db919835d3
(x_destroy_window) [HAVE_X_I18N]: Free xic and xim of frame.
Richard M. Stallman <rms@gnu.org>
parents:
14826
diff
changeset
|
11397 if (FRAME_XIM (f)) |
|
34db919835d3
(x_destroy_window) [HAVE_X_I18N]: Free xic and xim of frame.
Richard M. Stallman <rms@gnu.org>
parents:
14826
diff
changeset
|
11398 { |
|
34db919835d3
(x_destroy_window) [HAVE_X_I18N]: Free xic and xim of frame.
Richard M. Stallman <rms@gnu.org>
parents:
14826
diff
changeset
|
11399 XDestroyIC (FRAME_XIC (f)); |
|
14942
3432e5570488
(x_destroy_window): Do call XCloseIM if X11R6.
Richard M. Stallman <rms@gnu.org>
parents:
14921
diff
changeset
|
11400 #if ! defined (SOLARIS2) || defined (HAVE_X11R6) |
|
3432e5570488
(x_destroy_window): Do call XCloseIM if X11R6.
Richard M. Stallman <rms@gnu.org>
parents:
14921
diff
changeset
|
11401 /* This line causes crashes on Solaris with Openwin, |
|
3432e5570488
(x_destroy_window): Do call XCloseIM if X11R6.
Richard M. Stallman <rms@gnu.org>
parents:
14921
diff
changeset
|
11402 due to an apparent bug in XCloseIM. |
|
3432e5570488
(x_destroy_window): Do call XCloseIM if X11R6.
Richard M. Stallman <rms@gnu.org>
parents:
14921
diff
changeset
|
11403 X11R6 seems not to have the bug. */ |
|
14830
34db919835d3
(x_destroy_window) [HAVE_X_I18N]: Free xic and xim of frame.
Richard M. Stallman <rms@gnu.org>
parents:
14826
diff
changeset
|
11404 XCloseIM (FRAME_XIM (f)); |
|
14921
5a1524631bca
(x_destroy_window) [SOLARIS2]: Don't free the IC or IM.
Richard M. Stallman <rms@gnu.org>
parents:
14896
diff
changeset
|
11405 #endif |
|
14830
34db919835d3
(x_destroy_window) [HAVE_X_I18N]: Free xic and xim of frame.
Richard M. Stallman <rms@gnu.org>
parents:
14826
diff
changeset
|
11406 } |
|
34db919835d3
(x_destroy_window) [HAVE_X_I18N]: Free xic and xim of frame.
Richard M. Stallman <rms@gnu.org>
parents:
14826
diff
changeset
|
11407 #endif |
|
14489
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
11408 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
|
11409 #ifdef USE_X_TOOLKIT |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11410 if (f->output_data.x->widget) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11411 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
|
11412 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
|
11413 #endif /* USE_X_TOOLKIT */ |
|
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11414 |
|
14489
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
11415 free_frame_faces (f); |
|
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
11416 XFlush (FRAME_X_DISPLAY (f)); |
|
9bc700f13f97
(x_connection_signal): Call x_connection_closed properly.
Richard M. Stallman <rms@gnu.org>
parents:
14411
diff
changeset
|
11417 } |
|
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11418 |
| 17575 | 11419 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
|
11420 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
|
11421 |
|
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11422 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
|
11423 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
|
11424 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
|
11425 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
|
11426 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
|
11427 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
|
11428 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
|
11429 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
|
11430 |
|
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
11431 dpyinfo->reference_count--; |
|
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
11432 |
|
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
11433 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
|
11434 { |
|
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
11435 dpyinfo->mouse_face_beg_row |
|
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
11436 = dpyinfo->mouse_face_beg_col = -1; |
|
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
11437 dpyinfo->mouse_face_end_row |
|
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
11438 = dpyinfo->mouse_face_end_col = -1; |
|
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
11439 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
|
11440 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
|
11441 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
|
11442 } |
|
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11443 |
|
1810
bf618128d973
* xterm.c (x_scrollbar_create): Set the scrollbars to use
Jim Blandy <jimb@redhat.com>
parents:
1803
diff
changeset
|
11444 UNBLOCK_INPUT; |
| 286 | 11445 } |
| 11446 | |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
11447 /* Setting window manager hints. */ |
|
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
11448 |
|
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11449 /* 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
|
11450 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
|
11451 that the window now has. |
|
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11452 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
|
11453 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
|
11454 |
| 21514 | 11455 void |
|
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11456 x_wm_set_size_hint (f, flags, user_position) |
| 771 | 11457 struct frame *f; |
|
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11458 long flags; |
|
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11459 int user_position; |
| 286 | 11460 { |
| 11461 XSizeHints size_hints; | |
|
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11462 |
|
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11463 #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
|
11464 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
|
11465 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
|
11466 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
|
11467 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
|
11468 #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
|
11469 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
|
11470 #endif /* not USE_X_TOOLKIT */ |
| 286 | 11471 |
|
7187
ca0102511d80
(x_wm_set_size_hint): Don't set PMaxSize.
Richard M. Stallman <rms@gnu.org>
parents:
7169
diff
changeset
|
11472 /* 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
|
11473 size_hints.flags = PResizeInc | PMinSize /* | PMaxSize */; |
| 286 | 11474 |
|
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11475 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
|
11476 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
|
11477 |
|
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
|
11478 #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
|
11479 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
|
11480 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
|
11481 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
|
11482 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
|
11483 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
|
11484 #else /* not USE_X_TOOLKIT */ |
| 771 | 11485 size_hints.height = PIXEL_HEIGHT (f); |
| 11486 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
|
11487 #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
|
11488 |
|
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11489 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
|
11490 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
|
11491 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
|
11492 = 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
|
11493 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
|
11494 = 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
|
11495 |
| 12189 | 11496 /* Calculate the base and minimum sizes. |
| 11497 | |
| 11498 (When we use the X toolkit, we don't do it here. | |
| 11499 Instead we copy the values that the widgets are using, below.) */ | |
| 11500 #ifndef USE_X_TOOLKIT | |
|
976
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
11501 { |
|
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
|
11502 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
|
11503 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
|
11504 |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
11505 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
|
11506 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
|
11507 |
|
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11508 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
|
11509 |
|
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11510 /* 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
|
11511 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
|
11512 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
|
11513 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
|
11514 zero-row, zero-column frame. |
|
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
11515 |
|
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11516 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
|
11517 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
|
11518 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
|
11519 |
|
cd3d59155bf7
* xterm.c (x_wm_set_size_hint): Set the base_width and base_height
Jim Blandy <jimb@redhat.com>
parents:
1077
diff
changeset
|
11520 #ifdef HAVE_X11R4 |
|
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11521 size_hints.flags |= PBaseSize; |
|
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11522 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
|
11523 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
|
11524 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
|
11525 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
|
11526 #else |
|
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11527 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
|
11528 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
|
11529 #endif |
|
976
cbdfc337ec8f
* xterm.c (x_wm_hints): New variable.
Jim Blandy <jimb@redhat.com>
parents:
786
diff
changeset
|
11530 } |
| 286 | 11531 |
| 12189 | 11532 /* 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
|
11533 if (flags) |
| 286 | 11534 { |
| 12189 | 11535 size_hints.flags |= flags; |
| 11536 goto no_read; | |
| 11537 } | |
| 11538 #endif /* not USE_X_TOOLKIT */ | |
| 11539 | |
| 11540 { | |
| 11541 XSizeHints hints; /* Sometimes I hate X Windows... */ | |
| 11542 long supplied_return; | |
| 11543 int value; | |
|
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11544 |
|
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11545 #ifdef HAVE_X11R4 |
| 12189 | 11546 value = XGetWMNormalHints (FRAME_X_DISPLAY (f), window, &hints, |
| 11547 &supplied_return); | |
|
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11548 #else |
| 12189 | 11549 value = XGetNormalHints (FRAME_X_DISPLAY (f), window, &hints); |
| 11550 #endif | |
| 11551 | |
| 11552 #ifdef USE_X_TOOLKIT | |
| 11553 size_hints.base_height = hints.base_height; | |
| 11554 size_hints.base_width = hints.base_width; | |
| 11555 size_hints.min_height = hints.min_height; | |
| 11556 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
|
11557 #endif |
|
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
11558 |
| 12189 | 11559 if (flags) |
| 11560 size_hints.flags |= flags; | |
| 11561 else | |
| 11562 { | |
| 11563 if (value == 0) | |
| 11564 hints.flags = 0; | |
| 11565 if (hints.flags & PSize) | |
| 11566 size_hints.flags |= PSize; | |
| 11567 if (hints.flags & PPosition) | |
| 11568 size_hints.flags |= PPosition; | |
| 11569 if (hints.flags & USPosition) | |
| 11570 size_hints.flags |= USPosition; | |
| 11571 if (hints.flags & USSize) | |
| 11572 size_hints.flags |= USSize; | |
| 11573 } | |
| 11574 } | |
| 11575 | |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11576 #ifndef USE_X_TOOLKIT |
| 12189 | 11577 no_read: |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11578 #endif |
|
6883
77ceede38423
(x_make_frame_visible): Don't call XMapSubwindows.
Richard M. Stallman <rms@gnu.org>
parents:
6791
diff
changeset
|
11579 |
|
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11580 #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
|
11581 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
|
11582 size_hints.flags |= PWinGravity; |
|
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11583 |
|
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11584 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
|
11585 { |
|
7210
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11586 size_hints.flags &= ~ PPosition; |
|
682ff6213c36
(x_wm_set_size_hint): Always set PWinGravity.
Richard M. Stallman <rms@gnu.org>
parents:
7187
diff
changeset
|
11587 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
|
11588 } |
|
4777
21ed9c9bb210
(w_wn_set_size_hint): Make recent window gravity addition
Brian Fox <bfox@gnu.org>
parents:
4696
diff
changeset
|
11589 #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
|
11590 |
|
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
|
11591 #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
|
11592 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
|
11593 #else |
|
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
11594 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
|
11595 #endif |
| 286 | 11596 } |
| 11597 | |
| 11598 /* Used for IconicState or NormalState */ | |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11599 |
| 21514 | 11600 void |
| 771 | 11601 x_wm_set_window_state (f, state) |
| 11602 struct frame *f; | |
| 286 | 11603 int state; |
| 11604 { | |
|
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
11605 #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
|
11606 Arg al[1]; |
|
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11607 |
|
136819b017fc
(x_wm_set_window_state) [USE_X_TOOLKIT]: Use XtSetValues.
Richard M. Stallman <rms@gnu.org>
parents:
7508
diff
changeset
|
11608 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
|
11609 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
|
11610 #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
|
11611 Window window = FRAME_X_WINDOW (f); |
| 286 | 11612 |
|
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11613 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
|
11614 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
|
11615 |
|
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11616 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
|
11617 #endif /* not USE_X_TOOLKIT */ |
| 286 | 11618 } |
| 11619 | |
| 21514 | 11620 void |
|
9542
f8b7a65a94bc
(x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents:
9537
diff
changeset
|
11621 x_wm_set_icon_pixmap (f, pixmap_id) |
| 771 | 11622 struct frame *f; |
|
9542
f8b7a65a94bc
(x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents:
9537
diff
changeset
|
11623 int pixmap_id; |
| 286 | 11624 { |
|
15117
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
11625 Pixmap icon_pixmap; |
|
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
11626 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11627 #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
|
11628 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
|
11629 #endif |
| 286 | 11630 |
|
9542
f8b7a65a94bc
(x_bitmap_icon): Allow bitmap to come from file.
Richard M. Stallman <rms@gnu.org>
parents:
9537
diff
changeset
|
11631 if (pixmap_id > 0) |
|
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11632 { |
|
15117
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
11633 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
|
11634 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
|
11635 } |
|
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
11636 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
|
11637 { |
|
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
|
11638 /* 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
|
11639 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
|
11640 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
|
11641 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
|
11642 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
|
11643 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
|
11644 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
|
11645 #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
|
11646 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
|
11647 #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
|
11648 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
|
11649 #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
|
11650 } |
|
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11651 |
|
15117
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
11652 #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
|
11653 |
|
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
11654 { |
|
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
11655 Arg al[1]; |
|
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
11656 XtSetArg (al[0], XtNiconPixmap, icon_pixmap); |
|
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
11657 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
|
11658 } |
|
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
11659 |
|
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
11660 #else /* not USE_X_TOOLKIT */ |
|
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
11661 |
|
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11662 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
|
11663 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
|
11664 |
|
21673af29c32
[USE_X_TOOLKIT]: Include X11/Shell.h.
Richard M. Stallman <rms@gnu.org>
parents:
15080
diff
changeset
|
11665 #endif /* not USE_X_TOOLKIT */ |
| 286 | 11666 } |
| 11667 | |
| 21514 | 11668 void |
| 771 | 11669 x_wm_set_icon_position (f, icon_x, icon_y) |
| 11670 struct frame *f; | |
| 286 | 11671 int icon_x, icon_y; |
| 11672 { | |
|
7806
ef7a60d59543
(x_wm_set_icon_position, x_wm_set_icon_pixmap):
Richard M. Stallman <rms@gnu.org>
parents:
7801
diff
changeset
|
11673 #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
|
11674 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
|
11675 #else |
|
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
11676 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
|
11677 #endif |
| 286 | 11678 |
|
12667
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11679 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
|
11680 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
|
11681 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
|
11682 |
|
a3466dad7d6d
Renamings: frame->display => frame->output, struct x_display -> sruct x_output.
Richard M. Stallman <rms@gnu.org>
parents:
12657
diff
changeset
|
11683 XSetWMHints (FRAME_X_DISPLAY (f), window, &f->output_data.x->wm_hints); |
| 286 | 11684 } |
| 11685 | |
| 11686 | |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11687 /*********************************************************************** |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11688 Fonts |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11689 ***********************************************************************/ |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11690 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11691 /* 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
|
11692 |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11693 struct font_info * |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11694 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
|
11695 FRAME_PTR f; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11696 int font_idx; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11697 { |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11698 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
|
11699 } |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11700 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11701 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11702 /* 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
|
11703 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
|
11704 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
|
11705 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
|
11706 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
|
11707 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11708 Lisp_Object |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11709 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
|
11710 FRAME_PTR f; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11711 Lisp_Object pattern; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11712 int size; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11713 int maxnames; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11714 { |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11715 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
|
11716 Lisp_Object tem, second_best; |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11717 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
|
11718 int try_XLoadQueryFont = 0; |
|
24633
c7d905dca6ba
(x_list_fonts): Fix previous change.
Karl Heuer <kwzh@gnu.org>
parents:
24618
diff
changeset
|
11719 int count; |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11720 |
|
19447
34099ec680df
(x_list_fonts): Adjusted for the name change of
Kenichi Handa <handa@m17n.org>
parents:
19276
diff
changeset
|
11721 patterns = Fassoc (pattern, Valternate_fontname_alist); |
|
18347
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
11722 if (NILP (patterns)) |
|
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
11723 patterns = Fcons (pattern, Qnil); |
|
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
11724 |
|
22503
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
11725 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
|
11726 /* 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
|
11727 try_XLoadQueryFont = 1; |
|
19062
9cc02044117d
(x_list_fonts): Request at least 10 fonts by XListFonts.
Kenichi Handa <handa@m17n.org>
parents:
19060
diff
changeset
|
11728 |
|
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
11729 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
|
11730 { |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11731 int num_fonts; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11732 char **names; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11733 |
|
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
11734 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
|
11735 /* 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
|
11736 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
|
11737 (((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
|
11738 */ |
|
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
11739 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
|
11740 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
|
11741 !NILP (list = Fassoc (key, tem)))) |
|
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
11742 { |
|
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
11743 list = Fcdr_safe (list); |
|
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
11744 /* 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
|
11745 goto label_cached; |
|
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
11746 } |
|
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
11747 |
|
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
11748 /* 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
|
11749 |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11750 BLOCK_INPUT; |
|
24618
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
11751 count = x_catch_errors (dpy); |
|
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
11752 |
|
22503
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
11753 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
|
11754 { |
|
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
11755 XFontStruct *font; |
|
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
11756 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
|
11757 |
|
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
11758 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
|
11759 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
|
11760 { |
|
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
11761 /* 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
|
11762 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
|
11763 font = NULL; |
|
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
11764 x_clear_errors (dpy); |
|
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
11765 } |
|
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
11766 |
|
22503
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
11767 if (font |
|
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
11768 && 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
|
11769 { |
|
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
11770 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
|
11771 int len = strlen (name); |
|
22530
6d2e22a16952
(x_list_fonts): Keep alloca usage simple.
Karl Heuer <kwzh@gnu.org>
parents:
22522
diff
changeset
|
11772 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
|
11773 |
|
23095
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
11774 /* 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
|
11775 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
|
11776 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
|
11777 if (len == 0) |
|
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
11778 try_XLoadQueryFont = 0; |
|
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
11779 else |
|
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
11780 { |
|
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
11781 num_fonts = 1; |
|
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
11782 names = (char **) alloca (sizeof (char *)); |
|
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
11783 /* 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
|
11784 simple var. */ |
|
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
11785 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
|
11786 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
|
11787 XFree (name); |
|
4e83e072cd97
(x_list_fonts): Work-around for the case XGetAtomName
Kenichi Handa <handa@m17n.org>
parents:
23037
diff
changeset
|
11788 } |
|
22503
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
11789 } |
|
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
11790 else |
|
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
11791 try_XLoadQueryFont = 0; |
|
22943
5493321d4526
(x_list_fonts): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
22907
diff
changeset
|
11792 |
|
5493321d4526
(x_list_fonts): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
22907
diff
changeset
|
11793 if (font) |
|
5493321d4526
(x_list_fonts): Fix previous change.
Richard M. Stallman <rms@gnu.org>
parents:
22907
diff
changeset
|
11794 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
|
11795 } |
|
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
11796 |
|
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
11797 if (!try_XLoadQueryFont) |
|
24618
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
11798 { |
|
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
11799 /* 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
|
11800 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
|
11801 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
|
11802 &num_fonts); |
|
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
11803 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
|
11804 { |
|
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
11805 /* 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
|
11806 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
|
11807 names = NULL; |
|
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
11808 x_clear_errors (dpy); |
|
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
11809 } |
|
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
11810 } |
|
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
11811 |
|
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
11812 x_uncatch_errors (dpy, count); |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11813 UNBLOCK_INPUT; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11814 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11815 if (names) |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11816 { |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11817 int i; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11818 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11819 /* 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
|
11820 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
|
11821 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
|
11822 { |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11823 int width = 0; |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11824 char *p = names[i]; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11825 int average_width = -1, dashes = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11826 |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11827 /* 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
|
11828 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
|
11829 (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
|
11830 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
|
11831 ignore it. */ |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11832 while (*p) |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11833 if (*p++ == '-') |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11834 { |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11835 dashes++; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11836 if (dashes == 7) /* PIXEL_SIZE field */ |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11837 width = atoi (p); |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11838 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
|
11839 average_width = atoi (p); |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11840 } |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11841 if (dashes < 14 || average_width != 0) |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11842 { |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11843 tem = build_string (names[i]); |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11844 if (NILP (Fassoc (tem, list))) |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11845 { |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11846 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
|
11847 && ((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
|
11848 (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
|
11849 >= 0)) |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11850 /* 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
|
11851 width of this font. */ |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11852 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
|
11853 else |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11854 /* 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
|
11855 list = Fcons (Fcons (tem, Qnil), list); |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11856 } |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11857 } |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11858 } |
|
22503
104e277d77d3
(x_list_fonts): If SIZE is zero and MAXNAMES is 1, use
Kenichi Handa <handa@m17n.org>
parents:
22400
diff
changeset
|
11859 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
|
11860 XFreeFontNames (names); |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11861 } |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11862 |
|
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
11863 /* 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
|
11864 if (f != NULL) |
|
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
11865 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
|
11866 = Fcons (Fcons (key, list), |
|
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
11867 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
|
11868 |
|
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
11869 label_cached: |
|
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
11870 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
|
11871 |
|
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
11872 newlist = second_best = Qnil; |
|
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
11873 /* 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
|
11874 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
|
11875 { |
|
19060
7b362a9bf8e9
(x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents:
19027
diff
changeset
|
11876 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
|
11877 |
|
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
11878 tem = XCAR (list); |
|
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
11879 |
|
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
11880 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
|
11881 continue; |
|
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
11882 if (!size) |
|
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
11883 { |
|
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
11884 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
|
11885 continue; |
|
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
11886 } |
|
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
11887 |
|
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
11888 if (!INTEGERP (XCDR (tem))) |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11889 { |
|
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
11890 /* 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
|
11891 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
|
11892 XFontStruct *thisinfo; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11893 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11894 BLOCK_INPUT; |
|
24618
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
11895 count = x_catch_errors (dpy); |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11896 thisinfo = XLoadQueryFont (dpy, |
|
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
11897 XSTRING (XCAR (tem))->data); |
|
24618
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
11898 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
|
11899 { |
|
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
11900 /* 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
|
11901 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
|
11902 thisinfo = NULL; |
|
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
11903 x_clear_errors (dpy); |
|
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
11904 } |
|
b18f51ec1b6c
Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24561
diff
changeset
|
11905 x_uncatch_errors (dpy, count); |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11906 UNBLOCK_INPUT; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11907 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11908 if (thisinfo) |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11909 { |
|
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
11910 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
|
11911 = (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
|
11912 ? 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
|
11913 : 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
|
11914 XFreeFont (dpy, thisinfo); |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11915 } |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11916 else |
|
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
11917 /* 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
|
11918 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
|
11919 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
|
11920 XCDR (tem) = make_number (0); |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11921 } |
|
19060
7b362a9bf8e9
(x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents:
19027
diff
changeset
|
11922 |
|
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
11923 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
|
11924 if (found_size == size) |
|
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
11925 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
|
11926 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
|
11927 { |
|
19060
7b362a9bf8e9
(x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents:
19027
diff
changeset
|
11928 if (NILP (second_best)) |
|
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
11929 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
|
11930 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
|
11931 { |
|
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
11932 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
|
11933 || 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
|
11934 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
|
11935 } |
|
7b362a9bf8e9
(x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents:
19027
diff
changeset
|
11936 else |
|
7b362a9bf8e9
(x_list_fonts): Reject a font whose min_bounds.width is 0.
Richard M. Stallman <rms@gnu.org>
parents:
19027
diff
changeset
|
11937 { |
|
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
11938 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
|
11939 && 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
|
11940 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
|
11941 } |
|
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
11942 } |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11943 } |
|
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
11944 if (!NILP (newlist)) |
|
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
11945 break; |
|
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
11946 else if (!NILP (second_best)) |
|
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
11947 { |
|
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
11948 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
|
11949 break; |
|
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
11950 } |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11951 } |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11952 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11953 return newlist; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11954 } |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
11955 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11956 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11957 #if GLYPH_DEBUG |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11958 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11959 /* 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
|
11960 font table. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11961 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11962 static void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11963 x_check_font (f, font) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11964 struct frame *f; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11965 XFontStruct *font; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11966 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11967 int i; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11968 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
|
11969 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11970 xassert (font != NULL); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11971 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11972 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
|
11973 if (dpyinfo->font_table[i].name |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11974 && font == dpyinfo->font_table[i].font) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11975 break; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11976 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11977 xassert (i < dpyinfo->n_fonts); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11978 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11979 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11980 #endif /* GLYPH_DEBUG != 0 */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11981 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11982 /* 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
|
11983 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
|
11984 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
|
11985 "-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
|
11986 have font->min_bounds.width == 0. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11987 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11988 static INLINE void |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11989 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
|
11990 XFontStruct *font; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11991 int *w, *h; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11992 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11993 *h = FONT_HEIGHT (font); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11994 *w = font->min_bounds.width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11995 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
11996 /* 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
|
11997 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
|
11998 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
|
11999 if (*w <= 0) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12000 *w = font->max_bounds.width; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12001 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12002 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12003 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12004 /* 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
|
12005 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
|
12006 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
|
12007 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
|
12008 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
|
12009 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12010 static int |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12011 x_compute_min_glyph_bounds (f) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12012 struct frame *f; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12013 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12014 int i; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12015 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
|
12016 XFontStruct *font; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12017 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
|
12018 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
|
12019 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12020 dpyinfo->smallest_font_height = 100000; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12021 dpyinfo->smallest_char_width = 100000; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12022 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12023 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
|
12024 if (dpyinfo->font_table[i].name) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12025 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12026 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
|
12027 int w, h; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12028 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12029 font = (XFontStruct *) fontp->font; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12030 xassert (font != (XFontStruct *) ~0); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12031 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
|
12032 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12033 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
|
12034 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
|
12035 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12036 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12037 xassert (dpyinfo->smallest_char_width > 0 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12038 && dpyinfo->smallest_font_height > 0); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12039 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12040 return (dpyinfo->n_fonts == 1 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12041 || dpyinfo->smallest_char_width < old_width |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12042 || dpyinfo->smallest_font_height < old_height); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12043 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12044 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12045 |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12046 /* 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
|
12047 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
|
12048 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
|
12049 If loading is failed, return NULL. */ |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12050 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12051 struct font_info * |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12052 x_load_font (f, fontname, size) |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12053 struct frame *f; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12054 register char *fontname; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12055 int size; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12056 { |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12057 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
|
12058 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
|
12059 int count; |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12060 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12061 /* 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
|
12062 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
|
12063 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
|
12064 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
|
12065 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12066 if (!NILP (font_names)) |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12067 { |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12068 Lisp_Object tail; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12069 int i; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12070 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12071 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
|
12072 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
|
12073 if (dpyinfo->font_table[i].name |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12074 && (!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
|
12075 XSTRING (XCAR (tail))->data) |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12076 || !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
|
12077 XSTRING (XCAR (tail))->data))) |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12078 return (dpyinfo->font_table + i); |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12079 } |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12080 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12081 /* 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
|
12082 { |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12083 char *full_name; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12084 XFontStruct *font; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12085 struct font_info *fontp; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12086 unsigned long value; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12087 int i; |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12088 |
|
18347
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12089 /* 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
|
12090 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
|
12091 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
|
12092 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
|
12093 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
|
12094 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
|
12095 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
|
12096 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12097 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
|
12098 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
|
12099 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
|
12100 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
|
12101 { |
|
d4ee4399e999
(x_list_fonts): Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24224
diff
changeset
|
12102 /* 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
|
12103 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
|
12104 font = NULL; |
|
d4ee4399e999
(x_list_fonts): Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24224
diff
changeset
|
12105 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
|
12106 } |
|
d4ee4399e999
(x_list_fonts): Trap X errors so that Emacs doesn't die
Kenichi Handa <handa@m17n.org>
parents:
24224
diff
changeset
|
12107 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
|
12108 UNBLOCK_INPUT; |
|
17194
ae76b2a59dcc
(dumpglyphs): Set a clipping region when we draw glyphs
Kenichi Handa <handa@m17n.org>
parents:
17178
diff
changeset
|
12109 if (!font) |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12110 return NULL; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12111 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12112 /* 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
|
12113 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
|
12114 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
|
12115 break; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12116 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12117 /* 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
|
12118 if (i == dpyinfo->n_fonts |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12119 && 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
|
12120 { |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12121 int sz; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12122 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
|
12123 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
|
12124 dpyinfo->font_table |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12125 = (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
|
12126 } |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12127 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12128 fontp = dpyinfo->font_table + i; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12129 if (i == dpyinfo->n_fonts) |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12130 ++dpyinfo->n_fonts; |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12131 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12132 /* 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
|
12133 BLOCK_INPUT; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12134 fontp->font = font; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12135 fontp->font_idx = i; |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12136 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
|
12137 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
|
12138 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12139 /* 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
|
12140 full_name = 0; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12141 if (XGetFontProperty (font, XA_FONT, &value)) |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12142 { |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12143 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
|
12144 char *p = name; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12145 int dashes = 0; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12146 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12147 /* 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
|
12148 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
|
12149 so don't use it. |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12150 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
|
12151 stored in them. */ |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12152 while (*p) |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12153 { |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12154 if (*p == '-') |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12155 dashes++; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12156 p++; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12157 } |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12158 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12159 if (dashes >= 13) |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12160 { |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12161 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
|
12162 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
|
12163 } |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12164 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12165 XFree (name); |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12166 } |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12167 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12168 if (full_name != 0) |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12169 fontp->full_name = full_name; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12170 else |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12171 fontp->full_name = fontp->name; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12172 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12173 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
|
12174 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
|
12175 { |
|
4001ff593a99
(x_load_font): For the height of font, if normarl ascent and
Kenichi Handa <handa@m17n.org>
parents:
24223
diff
changeset
|
12176 /* 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
|
12177 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
|
12178 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
|
12179 if (max_height > fontp->height) |
|
24690
585a5e69e371
(x_load_font): Fix typo (`>' -> `=').
Kenichi Handa <handa@m17n.org>
parents:
24633
diff
changeset
|
12180 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
|
12181 } |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12182 |
|
18347
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12183 if (NILP (font_names)) |
|
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12184 { |
|
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12185 /* 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
|
12186 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
|
12187 the cache for x_list_fonts. */ |
|
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12188 Lisp_Object lispy_name = build_string (fontname); |
|
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12189 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
|
12190 |
|
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12191 XCDR (dpyinfo->name_list_element) |
|
18347
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12192 = Fcons (Fcons (Fcons (lispy_name, make_number (256)), |
|
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12193 Fcons (Fcons (lispy_full_name, |
|
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12194 make_number (fontp->size)), |
|
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12195 Qnil)), |
|
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12196 XCDR (dpyinfo->name_list_element)); |
|
18347
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12197 if (full_name) |
|
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12198 XCDR (dpyinfo->name_list_element) |
|
18347
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12199 = Fcons (Fcons (Fcons (lispy_full_name, make_number (256)), |
|
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12200 Fcons (Fcons (lispy_full_name, |
|
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12201 make_number (fontp->size)), |
|
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12202 Qnil)), |
|
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12203 XCDR (dpyinfo->name_list_element)); |
|
18347
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12204 } |
|
b7024f44f5d2
(dumpglyphs): Use FS_LOAD_FONT.
Kenichi Handa <handa@m17n.org>
parents:
18191
diff
changeset
|
12205 |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12206 /* 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
|
12207 code-points (0x20..0x7F or 0x2020..0x7F7F) of each charset to |
|
17877
7841036d55f4
(x_load_font): Set 4 instead of -1 in fontp->encoding[1]
Kenichi Handa <handa@m17n.org>
parents:
17825
diff
changeset
|
12208 the font code-points (0:0x20..0x7F, 1:0xA0..0xFF, 0:0x2020..0x7F7F, |
|
18057
07e0112aa8f5
(x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents:
18008
diff
changeset
|
12209 the font code-points (0:0x20..0x7F, 1:0xA0..0xFF, |
|
07e0112aa8f5
(x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents:
18008
diff
changeset
|
12210 0:0x2020..0x7F7F, 1:0xA0A0..0xFFFF, 3:0x20A0..0x7FFF, or |
|
07e0112aa8f5
(x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents:
18008
diff
changeset
|
12211 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
|
12212 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
|
12213 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
|
12214 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
|
12215 fontp->encoding[1] |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12216 = (font->max_byte1 == 0 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12217 /* 1-byte font */ |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12218 ? (font->min_char_or_byte2 < 0x80 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12219 ? (font->max_char_or_byte2 < 0x80 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12220 ? 0 /* 0x20..0x7F */ |
|
18057
07e0112aa8f5
(x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents:
18008
diff
changeset
|
12221 : 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
|
12222 : 1) /* 0xA0..0xFF */ |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12223 /* 2-byte font */ |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12224 : (font->min_byte1 < 0x80 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12225 ? (font->max_byte1 < 0x80 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12226 ? (font->min_char_or_byte2 < 0x80 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12227 ? (font->max_char_or_byte2 < 0x80 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12228 ? 0 /* 0x2020..0x7F7F */ |
|
18057
07e0112aa8f5
(x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents:
18008
diff
changeset
|
12229 : 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
|
12230 : 3) /* 0x20A0..0x7FFF */ |
|
18057
07e0112aa8f5
(x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents:
18008
diff
changeset
|
12231 : 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
|
12232 : (font->min_char_or_byte2 < 0x80 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12233 ? (font->max_char_or_byte2 < 0x80 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12234 ? 2 /* 0xA020..0xFF7F */ |
|
18057
07e0112aa8f5
(x_load_font): Use macro FONT_ENCODING_NOT_DECIDED.
Richard M. Stallman <rms@gnu.org>
parents:
18008
diff
changeset
|
12235 : 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
|
12236 : 1))); /* 0xA0A0..0xFFFF */ |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12237 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12238 fontp->baseline_offset |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12239 = (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
|
12240 ? (long) value : 0); |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12241 fontp->relative_compose |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12242 = (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
|
12243 ? (long) value : 0); |
|
17103
7cde34a6424e
(dumpglyphs): Pay attention to characters registered in
Kenichi Handa <handa@m17n.org>
parents:
17050
diff
changeset
|
12244 fontp->default_ascent |
|
7cde34a6424e
(dumpglyphs): Pay attention to characters registered in
Kenichi Handa <handa@m17n.org>
parents:
17050
diff
changeset
|
12245 = (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
|
12246 ? (long) value : 0); |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12247 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12248 /* 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
|
12249 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
|
12250 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
|
12251 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
|
12252 glyph matrix reallocation necessary. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12253 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
|
12254 UNBLOCK_INPUT; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12255 return fontp; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12256 } |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12257 } |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12258 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12259 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12260 /* 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
|
12261 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
|
12262 |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12263 struct font_info * |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12264 x_query_font (f, fontname) |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12265 struct frame *f; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12266 register char *fontname; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12267 { |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12268 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
|
12269 int i; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12270 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12271 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
|
12272 if (dpyinfo->font_table[i].name |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12273 && (!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
|
12274 || !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
|
12275 return (dpyinfo->font_table + i); |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12276 return NULL; |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12277 } |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12278 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12279 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12280 /* 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
|
12281 `encoder' of the structure. */ |
|
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
12282 |
|
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
12283 void |
|
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
12284 x_find_ccl_program (fontp) |
|
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
12285 struct font_info *fontp; |
|
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
12286 { |
|
25068
0d081383b5b8
(x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24991
diff
changeset
|
12287 Lisp_Object list, elt; |
|
21548
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
12288 |
|
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12289 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
|
12290 { |
|
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12291 elt = XCAR (list); |
|
21548
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
12292 if (CONSP (elt) |
|
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12293 && STRINGP (XCAR (elt)) |
|
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12294 && (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
|
12295 >= 0)) |
|
25068
0d081383b5b8
(x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24991
diff
changeset
|
12296 break; |
|
0d081383b5b8
(x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24991
diff
changeset
|
12297 } |
|
0d081383b5b8
(x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24991
diff
changeset
|
12298 if (! NILP (list)) |
|
0d081383b5b8
(x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24991
diff
changeset
|
12299 { |
|
25085
23813e3a69b8
(x_find_ccl_program): Add casting.
Kenichi Handa <handa@m17n.org>
parents:
25083
diff
changeset
|
12300 struct ccl_program *ccl |
|
23813e3a69b8
(x_find_ccl_program): Add casting.
Kenichi Handa <handa@m17n.org>
parents:
25083
diff
changeset
|
12301 = (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
|
12302 |
|
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12303 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
|
12304 xfree (ccl); |
|
0d081383b5b8
(x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24991
diff
changeset
|
12305 else |
|
0d081383b5b8
(x_find_ccl_program): Get compiled CCL code by just
Kenichi Handa <handa@m17n.org>
parents:
24991
diff
changeset
|
12306 fontp->font_encoder = ccl; |
|
21548
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
12307 } |
|
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
12308 } |
|
5d1f1ba38043
(x_find_ccl_program): New function.
Kenichi Handa <handa@m17n.org>
parents:
21514
diff
changeset
|
12309 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12310 |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12311 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12312 /*********************************************************************** |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12313 Initialization |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12314 ***********************************************************************/ |
|
1720
4f5e3ac5d822
* frame.h (struct frame): New fields `can_have_scrollbars' and
Jim Blandy <jimb@redhat.com>
parents:
1658
diff
changeset
|
12315 |
|
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12316 #ifdef USE_X_TOOLKIT |
|
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12317 static XrmOptionDescRec emacs_options[] = { |
|
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12318 {"-geometry", ".geometry", XrmoptionSepArg, NULL}, |
|
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12319 {"-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
|
12320 |
|
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12321 {"-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
|
12322 XrmoptionSepArg, NULL}, |
|
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12323 {"-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
|
12324 |
|
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12325 {"-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
|
12326 {"-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
|
12327 {"-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
|
12328 {"-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
|
12329 {"-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
|
12330 {"-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
|
12331 {"-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
|
12332 }; |
|
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12333 #endif /* USE_X_TOOLKIT */ |
|
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12334 |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12335 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
|
12336 |
| 11015 | 12337 #ifdef MULTI_KBOARD |
| 12338 /* Test whether two display-name strings agree up to the dot that separates | |
| 12339 the screen number from the server number. */ | |
| 12340 static int | |
| 12341 same_x_server (name1, name2) | |
| 12342 char *name1, *name2; | |
| 12343 { | |
| 12344 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
|
12345 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
|
12346 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
|
12347 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
|
12348 |
|
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12349 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
|
12350 && 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
|
12351 length_until_period++; |
|
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12352 |
|
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12353 /* 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
|
12354 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
|
12355 name1 += 4; |
|
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12356 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
|
12357 name2 += 4; |
|
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12358 /* 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
|
12359 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
|
12360 && name1[system_name_length] == ':') |
|
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12361 name1 += system_name_length; |
|
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12362 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
|
12363 && name2[system_name_length] == ':') |
|
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12364 name2 += system_name_length; |
|
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12365 /* 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
|
12366 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
|
12367 && name1[length_until_period] == ':') |
|
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12368 name1 += length_until_period; |
|
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12369 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
|
12370 && name2[length_until_period] == ':') |
|
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12371 name2 += length_until_period; |
|
1f8d4cb55bd6
(same_x_server): Detect treat ":0" and "unix:0"
Richard M. Stallman <rms@gnu.org>
parents:
23925
diff
changeset
|
12372 |
| 11015 | 12373 for (; *name1 != '\0' && *name1 == *name2; name1++, name2++) |
| 12374 { | |
| 12375 if (*name1 == ':') | |
| 12376 seen_colon++; | |
| 12377 if (seen_colon && *name1 == '.') | |
| 12378 return 1; | |
| 12379 } | |
| 12380 return (seen_colon | |
| 12381 && (*name1 == '.' || *name1 == '\0') | |
| 12382 && (*name2 == '.' || *name2 == '\0')); | |
| 12383 } | |
| 12384 #endif | |
| 12385 | |
|
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12386 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
|
12387 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
|
12388 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
|
12389 char *xrm_option; |
|
10e818a0248a
(x_term_init): New args xrm_option and resource_string.
Richard M. Stallman <rms@gnu.org>
parents:
7738
diff
changeset
|
12390 char *resource_name; |
| 286 | 12391 { |
|
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12392 int connection; |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12393 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
|
12394 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
|
12395 XrmDatabase xrdb; |
|
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12396 |
|
11997
50c7c05fc301
(x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents:
11994
diff
changeset
|
12397 BLOCK_INPUT; |
|
50c7c05fc301
(x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents:
11994
diff
changeset
|
12398 |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12399 if (!x_initialized) |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12400 { |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12401 x_initialize (); |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12402 x_initialized = 1; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12403 } |
| 286 | 12404 |
|
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12405 #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
|
12406 /* 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
|
12407 errors with X11R5: |
|
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
12408 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
|
12409 on protocol request 18skiloaf. |
|
9829d3c035f2
(x_term_init): Call XtSetLanguageProc only if HAVE_X11XTR6.
Richard M. Stallman <rms@gnu.org>
parents:
11375
diff
changeset
|
12410 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
|
12411 #ifdef HAVE_X11XTR6 |
|
9446
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
12412 XtSetLanguageProc (NULL, NULL, NULL); |
|
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
12413 #endif |
|
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
12414 |
|
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12415 { |
|
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12416 int argc = 0; |
|
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12417 char *argv[3]; |
|
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12418 |
|
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12419 argv[0] = ""; |
|
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12420 argc = 1; |
|
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12421 if (xrm_option) |
|
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12422 { |
|
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12423 argv[argc++] = "-xrm"; |
|
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12424 argv[argc++] = xrm_option; |
|
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12425 } |
|
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12426 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
|
12427 resource_name, EMACS_CLASS, |
|
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12428 emacs_options, XtNumber (emacs_options), |
|
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12429 &argc, argv); |
|
12530
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
12430 |
|
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
12431 #ifdef HAVE_X11XTR6 |
|
14963
6ac4f300f9b4
Include locale.h if HAVE_SETLOCALE.
Richard M. Stallman <rms@gnu.org>
parents:
14946
diff
changeset
|
12432 /* 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
|
12433 fixup_locale (); |
|
12530
c2b2449231c2
[HAVE_X11XTR6]: Include locale.h
Karl Heuer <kwzh@gnu.org>
parents:
12494
diff
changeset
|
12434 #endif |
|
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12435 } |
|
5672
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12436 |
|
cbc4229c1f90
(x_wm_set_size_hint): Swap southeast and northwest.
Richard M. Stallman <rms@gnu.org>
parents:
5362
diff
changeset
|
12437 #else /* not USE_X_TOOLKIT */ |
|
9446
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
12438 #ifdef HAVE_X11R5 |
|
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
12439 XSetLocaleModifiers (""); |
|
be58ba7c209d
(x_term_init): Call XtSetLanguageProc or XSetLocaleModifiers.
Richard M. Stallman <rms@gnu.org>
parents:
9340
diff
changeset
|
12440 #endif |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12441 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
|
12442 #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
|
12443 |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12444 /* Detect failure. */ |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12445 if (dpy == 0) |
|
11997
50c7c05fc301
(x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents:
11994
diff
changeset
|
12446 { |
|
50c7c05fc301
(x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents:
11994
diff
changeset
|
12447 UNBLOCK_INPUT; |
|
50c7c05fc301
(x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents:
11994
diff
changeset
|
12448 return 0; |
|
50c7c05fc301
(x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents:
11994
diff
changeset
|
12449 } |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12450 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12451 /* 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
|
12452 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12453 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
|
12454 |
| 11015 | 12455 #ifdef MULTI_KBOARD |
| 12456 { | |
| 12457 struct x_display_info *share; | |
| 12458 Lisp_Object tail; | |
| 12459 | |
| 12460 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
|
12461 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
|
12462 if (same_x_server (XSTRING (XCAR (XCAR (tail)))->data, |
| 11015 | 12463 XSTRING (display_name)->data)) |
| 12464 break; | |
| 12465 if (share) | |
| 12466 dpyinfo->kboard = share->kboard; | |
| 12467 else | |
| 12468 { | |
| 12469 dpyinfo->kboard = (KBOARD *) xmalloc (sizeof (KBOARD)); | |
| 12470 init_kboard (dpyinfo->kboard); | |
|
11807
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
12471 if (!EQ (XSYMBOL (Qvendor_specific_keysyms)->function, Qunbound)) |
|
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
12472 { |
|
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
12473 char *vendor = ServerVendor (dpy); |
|
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
12474 dpyinfo->kboard->Vsystem_key_alist |
|
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
12475 = call1 (Qvendor_specific_keysyms, |
|
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
12476 build_string (vendor ? vendor : "")); |
|
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
12477 } |
|
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
12478 |
| 11015 | 12479 dpyinfo->kboard->next_kboard = all_kboards; |
| 12480 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
|
12481 /* 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
|
12482 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
|
12483 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
|
12484 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
|
12485 current_kboard = dpyinfo->kboard; |
| 11015 | 12486 } |
| 12487 dpyinfo->kboard->reference_count++; | |
| 12488 } | |
|
10652
f6a41cb94a75
[MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents:
10634
diff
changeset
|
12489 #endif |
|
f6a41cb94a75
[MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents:
10634
diff
changeset
|
12490 |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12491 /* 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
|
12492 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
|
12493 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
|
12494 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12495 /* 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
|
12496 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
|
12497 x_display_name_list); |
|
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12498 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
|
12499 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12500 dpyinfo->display = dpy; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12501 |
| 286 | 12502 #if 0 |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12503 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
|
12504 #endif /* ! 0 */ |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12505 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12506 dpyinfo->x_id_name |
|
21244
50929073a0ba
Use STRING_BYTES and SET_STRING_BYTES.
Richard M. Stallman <rms@gnu.org>
parents:
21017
diff
changeset
|
12507 = (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
|
12508 + 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
|
12509 + 2); |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12510 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
|
12511 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
|
12512 |
|
74ae34a80f94
* xterm.c (x_meta_mod_mask): New variable, indicating which X
Jim Blandy <jimb@redhat.com>
parents:
1127
diff
changeset
|
12513 /* 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
|
12514 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
|
12515 |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
12516 /* 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
|
12517 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
|
12518 = 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
|
12519 |
|
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12520 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
|
12521 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
|
12522 #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
|
12523 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
|
12524 #else |
|
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12525 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
|
12526 #endif |
|
11162
95b70c82ec51
(x_term_init): Initialize cut_buffers_initialized.
Karl Heuer <kwzh@gnu.org>
parents:
11122
diff
changeset
|
12527 /* 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
|
12528 all versions. */ |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12529 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
|
12530 |
|
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12531 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
|
12532 DefaultScreen (dpyinfo->display)); |
|
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12533 dpyinfo->visual = select_visual (dpyinfo->display, dpyinfo->screen, |
|
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12534 &dpyinfo->n_planes); |
|
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12535 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
|
12536 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
|
12537 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
|
12538 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
|
12539 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
|
12540 dpyinfo->icon_bitmap_id = -1; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12541 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
|
12542 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
|
12543 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
|
12544 dpyinfo->bitmaps = 0; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12545 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
|
12546 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
|
12547 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
|
12548 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
|
12549 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
|
12550 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
|
12551 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
|
12552 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
|
12553 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
|
12554 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
|
12555 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
|
12556 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
|
12557 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
|
12558 dpyinfo->x_highlight_frame = 0; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12559 dpyinfo->image_cache = make_image_cache (); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12560 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12561 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12562 int screen_number = XScreenNumberOfScreen (dpyinfo->screen); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12563 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
|
12564 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
|
12565 dpyinfo->resy = pixels * 25.4 / mm; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12566 pixels = DisplayWidth (dpyinfo->display, screen_number); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12567 mm = DisplayWidthMM (dpyinfo->display, screen_number); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12568 dpyinfo->resx = pixels * 25.4 / mm; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12569 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12570 |
|
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12571 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
|
12572 = 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
|
12573 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
|
12574 = 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
|
12575 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
|
12576 = 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
|
12577 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
|
12578 = 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
|
12579 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
|
12580 = 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
|
12581 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
|
12582 = 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
|
12583 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
|
12584 = 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
|
12585 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
|
12586 = 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
|
12587 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
|
12588 = 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
|
12589 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
|
12590 = 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
|
12591 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
|
12592 = XInternAtom (dpyinfo->display, "TEXT", False); |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12593 dpyinfo->Xatom_COMPOUND_TEXT |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12594 = 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
|
12595 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
|
12596 = 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
|
12597 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
|
12598 = 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
|
12599 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
|
12600 = 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
|
12601 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
|
12602 = 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
|
12603 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
|
12604 = 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
|
12605 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
|
12606 = 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
|
12607 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
|
12608 = 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
|
12609 /* For properties of font. */ |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12610 dpyinfo->Xatom_PIXEL_SIZE |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12611 = XInternAtom (dpyinfo->display, "PIXEL_SIZE", False); |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12612 dpyinfo->Xatom_MULE_BASELINE_OFFSET |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12613 = 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
|
12614 dpyinfo->Xatom_MULE_RELATIVE_COMPOSE |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12615 = 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
|
12616 dpyinfo->Xatom_MULE_DEFAULT_ASCENT |
|
7cde34a6424e
(dumpglyphs): Pay attention to characters registered in
Kenichi Handa <handa@m17n.org>
parents:
17050
diff
changeset
|
12617 = 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
|
12618 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12619 /* Ghostscript support. */ |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12620 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
|
12621 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
|
12622 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12623 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
|
12624 False); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12625 |
|
11162
95b70c82ec51
(x_term_init): Initialize cut_buffers_initialized.
Karl Heuer <kwzh@gnu.org>
parents:
11122
diff
changeset
|
12626 dpyinfo->cut_buffers_initialized = 0; |
|
95b70c82ec51
(x_term_init): Initialize cut_buffers_initialized.
Karl Heuer <kwzh@gnu.org>
parents:
11122
diff
changeset
|
12627 |
|
9654
41681efe1086
Use FRAME_X_DISPLAY instead of x_current_display and XDISPLAY.
Richard M. Stallman <rms@gnu.org>
parents:
9577
diff
changeset
|
12628 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
|
12629 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
|
12630 |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12631 { |
|
18705
c4f2eab8e736
(x_term_init): Don't use initializer for null_bits.
Richard M. Stallman <rms@gnu.org>
parents:
18646
diff
changeset
|
12632 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
|
12633 |
|
c4f2eab8e736
(x_term_init): Don't use initializer for null_bits.
Richard M. Stallman <rms@gnu.org>
parents:
18646
diff
changeset
|
12634 null_bits[0] = 0x00; |
|
17050
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12635 |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12636 dpyinfo->null_pixel |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12637 = XCreatePixmapFromBitmapData (dpyinfo->display, dpyinfo->root_window, |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12638 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
|
12639 1); |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12640 } |
|
1e5fa2dc98cf
Include charset.h, ccl.h, and fontset.h.
Karl Heuer <kwzh@gnu.org>
parents:
16898
diff
changeset
|
12641 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12642 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12643 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
|
12644 extern unsigned char *gray_bitmap_bits; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12645 dpyinfo->gray |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12646 = XCreatePixmapFromBitmapData (dpyinfo->display, dpyinfo->root_window, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12647 gray_bitmap_bits, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12648 gray_bitmap_width, gray_bitmap_height, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12649 (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
|
12650 } |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12651 |
| 9572 | 12652 #ifdef subprocesses |
| 12653 /* 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
|
12654 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
|
12655 add_keyboard_wait_descriptor (connection); |
| 9572 | 12656 #endif |
|
1052
b8defcaf1b61
* xterm.c (x_make_frame_invisible): Don't forget to check the
Jim Blandy <jimb@redhat.com>
parents:
1020
diff
changeset
|
12657 |
|
4147
c6657758fb6f
* xterm.c (x_term_init): Adjust message printed when we can't
Jim Blandy <jimb@redhat.com>
parents:
3951
diff
changeset
|
12658 #ifndef F_SETOWN_BUG |
| 286 | 12659 #ifdef F_SETOWN |
| 12660 #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
|
12661 /* 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
|
12662 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
|
12663 #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
|
12664 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
|
12665 #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
|
12666 #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
|
12667 #endif /* F_SETOWN_BUG */ |
| 286 | 12668 |
| 12669 #ifdef SIGIO | |
|
11994
b4dd8ca308dd
(x_term_init): Call init_sigio only if interrupt_input.
Karl Heuer <kwzh@gnu.org>
parents:
11988
diff
changeset
|
12670 if (interrupt_input) |
|
b4dd8ca308dd
(x_term_init): Call init_sigio only if interrupt_input.
Karl Heuer <kwzh@gnu.org>
parents:
11988
diff
changeset
|
12671 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
|
12672 #endif /* ! defined (SIGIO) */ |
| 286 | 12673 |
|
15904
a31cfab57f69
(x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents:
15808
diff
changeset
|
12674 #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
|
12675 #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
|
12676 /* 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
|
12677 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
|
12678 { |
|
a31cfab57f69
(x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents:
15808
diff
changeset
|
12679 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
|
12680 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
|
12681 Font font; |
|
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
12682 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
|
12683 |
|
a31cfab57f69
(x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents:
15808
diff
changeset
|
12684 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
|
12685 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
|
12686 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
|
12687 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
|
12688 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
|
12689 to.addr = (XPointer)&font; |
|
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
12690 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
|
12691 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
|
12692 abort (); |
|
a31cfab57f69
(x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents:
15808
diff
changeset
|
12693 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
|
12694 XrmPutLineResource (&xrdb, "Emacs.dialog.*.font: 9x15"); |
|
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
12695 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
|
12696 } |
|
a31cfab57f69
(x_term_init): If the default Xt font does not exist on
Richard M. Stallman <rms@gnu.org>
parents:
15808
diff
changeset
|
12697 #endif |
|
19021
6f150e46a5fd
(x_term_init) [! HAVE_X11R5]: Don't try to use XtCvtStringToFont.
Richard M. Stallman <rms@gnu.org>
parents:
18996
diff
changeset
|
12698 #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
|
12699 |
|
11997
50c7c05fc301
(x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents:
11994
diff
changeset
|
12700 UNBLOCK_INPUT; |
|
50c7c05fc301
(x_term_init): Block input during this function.
Karl Heuer <kwzh@gnu.org>
parents:
11994
diff
changeset
|
12701 |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12702 return dpyinfo; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12703 } |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12704 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12705 /* 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
|
12706 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
|
12707 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12708 void |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12709 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
|
12710 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
|
12711 { |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12712 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
|
12713 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12714 /* 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
|
12715 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
|
12716 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
|
12717 && 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
|
12718 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
|
12719 else |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12720 { |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12721 Lisp_Object tail; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12722 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12723 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
|
12724 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
|
12725 { |
|
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12726 if (EQ (XCAR (XCDR (tail)), |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12727 dpyinfo->name_list_element)) |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12728 { |
|
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12729 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
|
12730 break; |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12731 } |
|
25646
9154af188477
Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents:
25633
diff
changeset
|
12732 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
|
12733 } |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12734 } |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12735 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12736 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
|
12737 x_display_list = dpyinfo->next; |
|
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12738 else |
|
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12739 { |
|
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12740 struct x_display_info *tail; |
|
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12741 |
|
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12742 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
|
12743 if (tail->next == dpyinfo) |
|
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12744 tail->next = tail->next->next; |
|
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12745 } |
|
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12746 |
|
12771
6f07c79d9a05
(x_delete_display) [AIX]: Don't call XRmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
12750
diff
changeset
|
12747 #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
|
12748 #ifndef AIX /* On AIX, XCloseDisplay calls this. */ |
|
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12749 XrmDestroyDatabase (dpyinfo->xrdb); |
|
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12750 #endif |
|
12771
6f07c79d9a05
(x_delete_display) [AIX]: Don't call XRmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
12750
diff
changeset
|
12751 #endif |
| 11015 | 12752 #ifdef MULTI_KBOARD |
| 12753 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
|
12754 delete_kboard (dpyinfo->kboard); |
|
10652
f6a41cb94a75
[MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents:
10634
diff
changeset
|
12755 #endif |
|
f6a41cb94a75
[MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents:
10634
diff
changeset
|
12756 xfree (dpyinfo->font_table); |
|
f6a41cb94a75
[MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents:
10634
diff
changeset
|
12757 xfree (dpyinfo->x_id_name); |
|
f6a41cb94a75
[MULTI_PERDISPLAY] (x_term_init): Initialize perdisplay.
Karl Heuer <kwzh@gnu.org>
parents:
10634
diff
changeset
|
12758 xfree (dpyinfo); |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12759 } |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12760 |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12761 /* 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
|
12762 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12763 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
|
12764 { |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12765 x_produce_glyphs, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12766 x_write_glyphs, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12767 x_insert_glyphs, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12768 x_clear_end_of_line, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12769 x_scroll_run, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12770 x_after_update_window_line, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12771 x_update_window_begin, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12772 x_update_window_end, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12773 XTcursor_to, |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12774 x_flush, |
|
25189
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
12775 x_get_glyph_overhangs, |
|
710445260df6
(x_draw_phys_cursor_glyph): Redraw overlaps.
Gerd Moellmann <gerd@gnu.org>
parents:
25150
diff
changeset
|
12776 x_fix_overlapping_area |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12777 }; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12778 |
| 21514 | 12779 void |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12780 x_initialize () |
|
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12781 { |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12782 rif = &x_redisplay_interface; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12783 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12784 clear_frame_hook = x_clear_frame; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12785 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
|
12786 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
|
12787 delete_glyphs_hook = x_delete_glyphs; |
| 286 | 12788 ring_bell_hook = XTring_bell; |
| 12789 reset_terminal_modes_hook = XTreset_terminal_modes; | |
| 12790 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
|
12791 update_begin_hook = x_update_begin; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12792 update_end_hook = x_update_end; |
| 286 | 12793 set_terminal_window_hook = XTset_terminal_window; |
| 12794 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
|
12795 frame_up_to_date_hook = XTframe_up_to_date; |
| 286 | 12796 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
|
12797 mouse_position_hook = XTmouse_position; |
| 771 | 12798 frame_rehighlight_hook = XTframe_rehighlight; |
|
1821
04fb1d3d6992
JimB's changes since January 18th
Jim Blandy <jimb@redhat.com>
parents:
1810
diff
changeset
|
12799 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
|
12800 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
|
12801 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
|
12802 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
|
12803 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
|
12804 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
|
12805 |
| 771 | 12806 scroll_region_ok = 1; /* we'll scroll partial frames */ |
| 286 | 12807 char_ins_del_ok = 0; /* just as fast to write the line */ |
| 12808 line_ins_del_ok = 1; /* we'll just blt 'em */ | |
| 12809 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
|
12810 memory_below_frame = 0; /* we don't remember what scrolls |
| 286 | 12811 off the bottom */ |
| 12812 baud_rate = 19200; | |
| 12813 | |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12814 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
|
12815 last_tool_bar_item = -1; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12816 any_help_event_p = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12817 |
|
4476
e7de1b007447
(x_term_init): Set the hooks before we call Fset_input_mode.
Richard M. Stallman <rms@gnu.org>
parents:
4304
diff
changeset
|
12818 /* 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
|
12819 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
|
12820 |
|
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12821 #ifdef USE_X_TOOLKIT |
|
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12822 XtToolkitInitialize (); |
|
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12823 Xt_app_con = XtCreateApplicationContext (); |
|
12494
bfbe2490dbf0
(x_initialize) [USE_X_TOOLKIT]: Set fallback resources.
Richard M. Stallman <rms@gnu.org>
parents:
12431
diff
changeset
|
12824 XtAppSetFallbackResources (Xt_app_con, Xt_default_resources); |
|
9741
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12825 #endif |
|
bd9d06e542c6
(x_delete_display): Call XrmDestroyDatabase.
Richard M. Stallman <rms@gnu.org>
parents:
9704
diff
changeset
|
12826 |
|
9537
f025140f7ff7
(stuffline, scraplines): Functions deleted.
Karl Heuer <kwzh@gnu.org>
parents:
9526
diff
changeset
|
12827 /* 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
|
12828 original error handler. */ |
|
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
12829 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
|
12830 XSetIOErrorHandler (x_io_error_quitter); |
| 286 | 12831 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12832 /* Disable Window Change signals; they are handled by X events. */ |
| 286 | 12833 #ifdef SIGWINCH |
| 12834 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
|
12835 #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
|
12836 |
|
10743
6977bff3ff38
(x_display_bar_cursor): Use frame's cursor_width.
Richard M. Stallman <rms@gnu.org>
parents:
10652
diff
changeset
|
12837 signal (SIGPIPE, x_connection_signal); |
| 286 | 12838 } |
| 395 | 12839 |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12840 |
| 395 | 12841 void |
| 12842 syms_of_xterm () | |
| 12843 { | |
|
17607
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
12844 staticpro (&x_error_message_string); |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
12845 x_error_message_string = Qnil; |
|
251e103f2d53
(XTmouse_position, x_term_init):
Richard M. Stallman <rms@gnu.org>
parents:
17575
diff
changeset
|
12846 |
|
9704
39b34bbe59c9
(x_catch_errors, x_check_errors, x_had_errors_p)
Richard M. Stallman <rms@gnu.org>
parents:
9654
diff
changeset
|
12847 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
|
12848 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
|
12849 |
|
1993
645d96bd3daf
Use the term `scroll bar', instead of `scrollbar'.
Jim Blandy <jimb@redhat.com>
parents:
1935
diff
changeset
|
12850 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
|
12851 last_mouse_scroll_bar = Qnil; |
|
11807
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
12852 |
|
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
12853 staticpro (&Qvendor_specific_keysyms); |
|
73fb6570f718
(Qvendor_specific_keysyms): New var.
Karl Heuer <kwzh@gnu.org>
parents:
11610
diff
changeset
|
12854 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
|
12855 |
|
f214673e68a8
(XTread_socket): Pass keys in menu bar to toolkit alone
Richard M. Stallman <rms@gnu.org>
parents:
15794
diff
changeset
|
12856 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
|
12857 last_mouse_press_frame = Qnil; |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12858 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12859 staticpro (&help_echo); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12860 help_echo = Qnil; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12861 staticpro (&previous_help_echo); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12862 previous_help_echo = Qnil; |
|
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 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
|
12865 "*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
|
12866 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
|
12867 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
|
12868 x_stretch_cursor_p = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12869 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12870 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
|
12871 "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
|
12872 #if USE_TOOLKIT_SCROLL_BARS |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12873 x_toolkit_scroll_bars_p = 1; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12874 #else |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12875 x_toolkit_scroll_bars_p = 0; |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12876 #endif |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12877 |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12878 defsubr (&Sxt_process_timeouts); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12879 staticpro (&last_mouse_motion_frame); |
|
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12880 last_mouse_motion_frame = Qnil; |
| 395 | 12881 } |
|
14694
41de9b2640a1
(X_CONNECTION_LOCK_FLAG): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
14692
diff
changeset
|
12882 |
|
41de9b2640a1
(X_CONNECTION_LOCK_FLAG): New macro.
Richard M. Stallman <rms@gnu.org>
parents:
14692
diff
changeset
|
12883 #endif /* not HAVE_X_WINDOWS */ |
|
24991
53d428012caf
Display-related functions implemented from scratch. Add toolkit
Gerd Moellmann <gerd@gnu.org>
parents:
24941
diff
changeset
|
12884 |
